2011-11-28 92 views
23

我开始知道C#3.0带有自动实现属性的新功能,我喜欢它,因为我们不必声明额外的私有变量这(与早期的财产),前面我使用的是属性即如何在ASP.NET中为自动实现的属性设置默认值

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

现在我已经转换成自动实现的属性即

public bool IsPopup 
{ 
    get; set; 
} 

我想设置的这个默认值属性为true而不使用它,即使在page_init方法中,我试过但没有成功,可以任何一个解释如何做到这一点?

+3

在构造函数中初始化它 –

回答

39

您可以在默认的构造函数初始化属性:

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 
+0

谢谢,我认为这是唯一的方法。 –

+0

寻找更具体的答案,为此我必须在构造函数中编写额外的代码,是否没有办法将它写入自动实现的属性本身,而不使用旧约定。 –

+2

不知何故,你必须初始化你的财产。由于没有后台字段(它由编译器生成),因此没有其他选项。在这种情况下,我编写了完整的属性,幸运的是,您可以通过智能来执行此操作。 – slfan

0

你有没有试过自动属性指定DefaultValueAttribute

+0

不,因为我从来没有使用.net 4.0 –

+9

好,所以我发现这不是正确的方式。看来,DefaultValueAttribute只是指示元数据,一个属性可以有一个默认值,并没有真正设置它。所以我希望这有助于某人。 –

6

属性并不适用于支持字段,所以默认值的属性不会为这种类型的物业工作。

你可以,但是,初始化一个自动属性:

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及以下

不幸的是,低于6.0的C#版本不支持这个,所以你必须在构造函数中初始化自动属性的默认值。

+1

感谢提供的信息 –

+1

良好的编辑鹰眼,谢谢你的更新,包括C#6.0。 –

0
using System.ComponentModel; 

[DefaultValue(true)] 
public bool IsPopup 
{ 
    get 
    { 
     return isPopup; 
    } 
    set 
    { 
     isPopup = value; 
    } 
} 
+3

您是否看到Akshat Jeewan Sharma的答案? –

+0

是“复制并粘贴”? –

+2

请参阅@Jeewan Sharma的答案,了解这不是正确的方式。 –

0

可以使用默认属性数值的像下面

这种方法的优点是不需要检查空值布尔类型

using System.ComponentModel; 

public class ClassName 
{ 
    [DefaultValue(true)] 
    public bool IsPopup{ get; set; } 
} 
+2

这实际上并没有设置默认值,它只是表明默认值应该是什么 –

+0

@JoeFlateau你能解释两种方法有什么不同吗?B'cos当我从控制器访问该属性时,它的值是true.So然后 ? – Sampath

+4

DefaultValue纯粹是信息性的,Visual Studio将显示值不是粗体。 –

相关问题