2015-10-17 84 views
0

我想知道,當你創建一個自動屬性 並調用在main()方法set一個隨機值,其中該存儲是value
如本例:自動屬性



    class Program 
     { 
      static void Main(string[] args) 
      { 
       Example W = new Example(); 

       W.Num = 10; 
       Console.WriteLine("{0}", W.Num); 

       Console.WriteLine("{0}", W.getNum()); 
      } 
     } 



    class Example 
      { 
       private int num; 

       public int Num { get; set; } 

       public int getNum() { return num; } 
      } 

爲什麼是輸出:

回答

0

自動實現的屬性使得代碼更清潔,因爲getter或setter不需要額外的邏輯。編譯器實際上爲自動實現的屬性生成了一個後臺字段,但是這個後臺字段在代碼中是不可見的。

在您的示例中,num字段和Num屬性之間沒有關聯,因此沒有理由應該更改num

+0

這就是從我身上遺失的^^。 非常感謝,現在我明白了 – Moutasem

1

因爲你是返回num,不Num。並且num未初始化,所以此值爲0.

+0

那麼使用自動屬性有什麼好處!是不是用來初始化數據字段?! – Moutasem

+0

你沒有初始化字段'num'。在'Example','num'和'Num'類中你有兩個不同的屬性。 – LINQ

0

這裏沒有什麼異常。

當調用

Example W = new Example(); 

然後最初NUM = 0和Num = 0;

您分配了Num,not num。

0

num你的Example類是多餘的。

如果你寫了這個前自動屬性initialisers加入到C#中,它應該是這樣的:

private int num; 

public int Num 
{ 
    get{ return num;} 
    set{ num = value;} 
} 

寫作公共public int Num { get; set; }基本上是在幕後同樣的事情。沒有必要實現getNum()(如Java),因爲這相當於int a = w.Num;

+0

所以基本上我們可以聲明數據字段爲private,同時聲明那裏「set」和「get」,而不必聲明整個另一個屬性來完成此操作? – Moutasem

+0

您甚至不必包含數據字段。只要寫get set屬性就足夠了。這些字段由編譯器添加,因此您不必擔心它們。 –

+0

這是驚人的,現在我明白了,非常感謝 – Moutasem

0

如果使用new關鍵字,則爲您的類創建新實例並重新創建所有對象。

例如;

class Program 
    { 
     static void Main(string[] args) 
     { 
      Example W = new Example(); 

      W.Num = 10; 

      Example W1 = new Example(); 

      Console.WriteLine("{0}", W.Num); //10 
      Console.WriteLine("{0}", W1.Num); //0 
     } 
    } 

這只是您的答案信息;你返回不同的變量。你沒有設置它們。