2013-08-02 64 views
0
class Program 
{ 
    class B 
    { 
     [DefaultValue(2)] 
     public int x, y; 

     [DefaultValue(5)] 
     public int z; 
    } 

    static void Main(string[] args) 
    { 
     B b = new B(); 
     Console.WriteLine(String.Format("{0} {1} {2}", b.x, b.y, b.z)); 
    } 
} 

結果:0,0,0DefaultValue是否在控制檯應用程序中起作用?

DefaultValueAttribute不會在控制檯應用程序中工作,或者我做了什麼了嗎?

編輯:

有人說大約有get,set性質,但這並不工作過:

class Program 
{ 
    public class A 
    { 
     [DefaultValue("123")] 
     public string Name { get; set; } 
    } 

    static void Main(string[] args) 
    { 
     var a = new A(); 
     Console.WriteLine(a.Name); 
    } 
} 

結果:空字符串

回答

2

DefaultValue(例如串行器可以決定不序列z如果它的值是5,因爲這是默認的) 。

編譯器不使用該屬性來爲您的類生成默認構造函數。

而應該定義一個默認構造函數如下:

class B { 
    public B() { 
     x = y = 2; 
     z = 5; 
    } 
} 
2

請參閱:DefaultValueAttribute Class

指定屬性的默認值。

xyz沒有屬性,但各個領域。 試試這個:作爲一個屬性由某些類在運行時做一些與你的對象

class B 
    { 
     public int x, y, z; 
     public B() 
     { 
      x = y = 2; 
      z = 5; 
     } 
    } 
+0

我更新了我的問題屬性名稱{get;集;}'。這是一個財產嗎?如果不是,請示範我,我不明白, – FSou1

+0

@ FSou1:是的,這是一個屬性。但是正如你可以在安德烈的回答中看到的那樣,'DefaultValue'並沒有真正做任何事情。 – ProgramFOX

3

DefaultValue並沒有真正做任何事情,它有指示作用,這樣其他的代碼可以找它,MSDN explains

視覺設計師可以使用默認值重置成員的 值。代碼生成器也可以使用默認值來確定 是否應該爲成員生成代碼。 A DefaultValueAttribute不會使成員自動使用屬性值初始化 。您必須在代碼中設置初始值 。

1

您對.net屬性期望過高。屬性只是元數據的擴展。也就是說,編譯器只是將這種信息綁定到特定的屬性,而不是設置你期望的真實值。 所以如果你想獲得價值集,必須有一些額外的代碼是由你自己或其他框架爲你寫的。 您可以在堆棧溢出時檢查此鏈接。 .Net DefaultValueAttribute on Properties

相關問題