2011-11-28 38 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將顯示值不是粗體。 –

相關問題