Как установить значение по умолчанию для автоматически реализуемых свойств в ASP.NET

Я узнал, что C # 3.0 поставляется с новой функцией автоматически реализуемых свойств, мне она понравилась, так как нам не нужно объявлять дополнительную частную переменную в этом (по сравнению с более ранним свойством), раньше я использовал свойство, т.е.

private bool isPopup = true;
public bool IsPopup
{
    get
    {
      return isPopup;
    }
    set
    {
      isPopup = value;
    }
}

Теперь я преобразовал его в свойство с автоматической реализацией, т.е.

public bool IsPopup
{
    get; set;
}

Я хочу установить для этого свойства значение по умолчанию true, не используя его даже в методе page_init, я пробовал, но не преуспел. Может ли кто-нибудь объяснить, как это сделать?


person Imran Rizvi    schedule 28.11.2011    source источник
comment
Инициализируйте его в конструкторе   -  person Abdul Munim    schedule 28.11.2011


Ответы (5)


Вы можете инициализировать свойство в конструкторе по умолчанию:

public MyClass()
{
   IsPopup = true;
}

В C # 6.0 можно инициализировать свойство в объявлении, как обычные поля-члены:

public bool IsPopup { get; set; } = true;  // property initializer

Теперь можно даже создать настоящее автоматическое свойство, доступное только для чтения, которое можно инициализировать напрямую или в конструкторе, но не устанавливать в других методах класса.

public bool IsPopup { get; } = true;  // read-only property with initializer
person slfan    schedule 28.11.2011
comment
Спасибо, я думаю, это единственный способ. - person Imran Rizvi; 28.11.2011
comment
В поисках более конкретных ответов, для этого мне нужно написать дополнительный код в конструкторе, нет возможности записать его в самом автореализованном свойстве без использования старых соглашений. - person Imran Rizvi; 29.11.2011
comment
Каким-то образом вам нужно инициализировать свою собственность. Поскольку нет поля поддержки (оно генерируется компилятором), другого варианта нет. В этих условиях я пишу полные свойства, к счастью, для этого у вас есть intellisense. - person slfan; 29.11.2011
comment
@slfan Можете уточнить? Я начинаю использовать авто и пытаюсь понять основы. Ваш ответ имел смысл, но ваш комментарий (когда я его читал), кажется, ему противоречит - я уверен, что я неправильно понимаю, что вы говорите в этом комментарии, хотя ваш ответ не был бы правильным и имел положительные голоса. - person Nyra; 18.07.2014
comment
На данный момент это единственный способ. В следующем C # 6.0 будет возможность напрямую инициализировать свойство. Я использую полные свойства только тогда, когда мне нужно написать код в сеттере или геттере. - person slfan; 18.07.2014

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

Однако вы можете инициализировать свойство auto:

VB.NET

Property FirstName As String = "James"
Property PartNo As Integer = 44302
Property Orders As New List(Of Order)(500)

C # 6.0 и выше

public string FirstName { get; set; } = "James";
public int PartNo { get; set; } = 44302;
public List<Order> Orders { get; set; } = new List<Order>(500);

C # 5.0 и ниже

К сожалению, версии C # ниже 6.0 не поддерживают это, поэтому вам нужно инициализировать значения по умолчанию для свойств auto в конструкторе.

person Ed DeGagne    schedule 09.05.2012
comment
Хорошая редакция Eagle-Eye, спасибо за обновление, включившее C # 6.0. - person Ed DeGagne; 24.09.2015

Вы пробовали DefaultValueAttribute?

person Akshat Jiwan Sharma    schedule 05.05.2012
comment
Итак, я обнаружил, что это был неправильный способ. Кажется, что DefaultValueAttribute просто указывает метаданным, что свойство может иметь значение по умолчанию, и на самом деле не устанавливает его. Так что я надеюсь, что это кому-то поможет. - person Akshat Jiwan Sharma; 23.05.2012

Вы можете использовать значение свойства по умолчанию, как показано ниже.

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

using System.ComponentModel; 

public class ClassName
 {
   [DefaultValue(true)]
   public bool IsPopup{ get; set; }
 }
person Sampath    schedule 13.11.2012
comment
На самом деле это не устанавливает значение по умолчанию, а просто указывает, каким должно быть значение по умолчанию. - person Joe Flateau; 21.12.2012
comment
@JoeFlateau, не могли бы вы объяснить, в чем разница между обоими методами? B'cos, когда я обращаюсь к этому свойству с контроллера, его значение истинно. Итак? - person Sampath; 21.12.2012
comment
DefaultValue является чисто информационным, Visual Studio покажет значение жирным шрифтом. - person Joe Flateau; 21.12.2012

person    schedule
comment
Вы видели ответ Акшата Дживана Шармы? - person Imran Rizvi; 28.07.2012
comment
Это было скопировать и вставить? - person Pablo Claus; 29.07.2012
comment
см. ответ @Jeewan Sharma, чтобы понять, что это неправильный способ. - person now he who must not be named.; 10.02.2014