Находясь внутри класса, лучше назвать его закрытыми членами или его общедоступными свойствами? [Дубликат]

Это невозможно легко . Взаимодействие с моделью в Web API принципиально отличается от MVC, и вам нужно будет написать MediaTypeFormatter, который будет считывать поток файлов в вашу модель и дополнительно связывать примитивы, которые могут быть значительно сложными.

Самое простое решение: для захвата потока файлов с запроса с использованием некоторого типа MultipartStreamProvider и других параметров с использованием коллекции значений имени FormData с этого провайдера

Пример - http://www.asp.net / web-api / overview / work-with-http / send-html-form-data, -part-2 :

public async Task PostFormData()
{
    if (!Request.Content.IsMimeMultipartContent())
    {
        throw new HttpResponseException(HttpStatusCode.UnsupportedMediaType);
    }

    string root = HttpContext.Current.Server.MapPath("~/App_Data");
    var provider = new MultipartFormDataStreamProvider(root);

    try
    {
        await Request.Content.ReadAsMultipartAsync(provider);

        // Show all the key-value pairs.
        foreach (var key in provider.FormData.AllKeys)
        {
            foreach (var val in provider.FormData.GetValues(key))
            {
                Trace.WriteLine(string.Format("{0}: {1}", key, val));
            }
        }

        return Request.CreateResponse(HttpStatusCode.OK);
    }
    catch (System.Exception e)
    {
        return Request.CreateErrorResponse(HttpStatusCode.InternalServerError, e);
    }
}

11
задан Amberite 28 January 2010 в 03:04
поделиться

5 ответов

Используйте свойство.

Я думаю, что имущество должно быть полностью ответственным за управление этим месторождением.

Есть много реализаций, где это не имеет значения, но есть много, где это имеет значение - много. Кроме того, это может быть немного боли, чтобы отслеживать, потому что она всегда выглядит .

Вы пойдите не так, как вы не позвуты на гораздо меньше времени, чем звонить в поле, и где там исключения из этого правила, документируют обоснование.

12
ответ дан 3 December 2019 в 08:04
поделиться

Просто добавить еще одну вещь, ваш пример спросил только о GetTers. Другая половина этого - загадка.

Иногда вы захотите, чтобы объект использовал поселенцы, а иногда вы хотели бы обходить их и просто назначить основное поле.

Например, скажем, у вас есть свойство под названием ISModified. Что бы сказать вам всякий раз, когда объект был изменен. Вы можете перевернуть все ваши загадки, чтобы верно в случае, если другое значение присваивается одному из основных полей.

Теперь, если вы увлажняете этот объект (либо загрузка с DB или где-то еще), то вы не хотите, чтобы ISModified Set. Потому что, совсем честно говоря, это еще не модифицировано. Таким образом, в этом методе вы используете базовые имена поля, но во всех других методах вы используете Setter свойств.

1
ответ дан 3 December 2019 в 08:04
поделиться

Это зависит, вы хотите сделать то, что делает свойство? Частная / публика на самом деле не имеет значения, это просто как позвонить в функцию.

Как и оно, вы действительно просто создали «функцию» в ожидании необходимости что-то делать всякий раз, когда это значение доступно или изменено.

Проблема с этим, вы можете прийти к тому, что вы хотите сделать одну вещь, где его доступен в некоторых местах, а другой, когда он доступа к другим местам, поэтому вы все еще должны будут изменить все «звонки» к нему в одном из мест.

Факт вопроса - это, если все, что доступ к этой переменной - даже функции частного класса - делает это через свойство, которое просто проходит через переменную, зачем вообще иметь свойство? Почему бы не просто создать переменную, называемую «MyVariable», то, если вы обнаружите, что хотите сделать что-то, когда его изменили / доступен, просто создайте другую переменную, называемую _MyVariable или что-то, а затем измените MyVariable, чтобы тогда быть недвижимостью для _MyVariabiable.

Вы должны подумать о свойствах как о том, что такие, как функции Accessor () и Mutator (), которые вы использовали для написания, трюк с ними было, если вы обнаружили, что вы хотите сделать какой-то код всякий раз, когда переменная была «доступен» Вы должны были изменить все вызовы на эту переменную для вместо этого Accessor (вызов функции, а не просто доступ к переменной элементарии), именно поэтому вы создали «по умолчанию» доступными и матадорами, на всякий случай. Как я уже говорил выше, у вас нет этой проблемы с C # и свойствами (за исключением того, что в одном случае, если вы не можете написать в суб-членах члена, если его свойство ... почему ??)

0
ответ дан 3 December 2019 в 08:04
поделиться

Это действительно будет зависеть от того, что вы получаете к немуществу. Рассмотрим следующие два сценария:

Сценарий 1: вы пишете метод, чтобы обеспечить общие действия на данные в классе:

// assume a hypothetical class Position

public class Circle
{
    private int _radius;
    private int _xpos;
    private int _ypos;

    public int Radius { get { return _radius; } }
    public Position Center { get { return new Position(_xpos, _ypos); } }

    public bool PointInCircle(Position other)
    {
         return distance(this.Center, other) < this.Radius;
    }
}

Очевидно, что поведение точечного точка должно быть таким же, как если пользователь выполнил код внутри него. Поэтому имеет смысл использовать публичные свойства.

Сценарий 2: Вы пишете метод для манипулирования основными данными. Хорошим примером этого является сериализация. Вы хотели бы сериализовать основные элементы данных, в отличие от значений, возвращаемых доступами имущества.

-121--2975491-

Зависит от того, если вы получаете доступ к свойству, может быть «проверка», который называется, который называется.

private int timeSinceLastPropertyAccess;

public int TimeSinceLastPropertyAccess
{
   get 
   { 
      // Reset timeSinceLastPropertyAccess to 0
      int a = timeSinceLastPropertyAccess; 
      timeSinceLastPropertyAccess = 0; 
      return a; 
   }
}

Вы хотите, чтобы TimesIncelastPropertyAccess можно сбросить, когда он используется, когда внутри вашего класса или нет?

1
ответ дан 3 December 2019 в 08:04
поделиться

Это действительно будет зависеть от того, для чего вы обращаетесь к свойству. Рассмотрим следующие два сценария:

Scenario 1: Вы пишете метод, обеспечивающий общее действие на данные в классе:

// assume a hypothetical class Position

public class Circle
{
    private int _radius;
    private int _xpos;
    private int _ypos;

    public int Radius { get { return _radius; } }
    public Position Center { get { return new Position(_xpos, _ypos); } }

    public bool PointInCircle(Position other)
    {
         return distance(this.Center, other) < this.Radius;
    }
}

Очевидно, что поведение PointInCircle должно быть таким же, как если бы пользователь выполнял код внутри него. Поэтому имеет смысл использовать общие свойства.

Сценарий 2: вы пишете метод для манипулирования базовыми данными. Хорошим примером этого является сериализация. Вы захотите сериализовать члены базовых данных в отличие от значений, возвращаемых аксессуарами свойств.

1
ответ дан 3 December 2019 в 08:04
поделиться
Другие вопросы по тегам:

Похожие вопросы: