2016-09-22 6 views
0
using System; 
using System.Collections.Generic; 
using System.Collections.ObjectModel; 

namespace ConsoleApplication11 
{ 

    class Customer 
    { 

     public List<string> Strings 
     { 
      get; 

     } = new List<string>(); 
     class Program 
     { 
      static void Main(string[] args) 
      { 
       Customer myCustomer = new Customer(); 
       myCustomer.Strings.Add("test"); 
      } 
     } 
    } 
} 

最後に、コレクションStringssetなしでプロパティ宣言に追加できます。なぜC#のようなデザインですか? collectionが正常な性質のように機能するかどうかを理解することは簡単でしょう。コレクションプロパティを設定せずに変更できるのはなぜですか?

答えて

4

正常に動作していますが、その操作でプロパティを設定していません。 List<>がオブジェクトです。あなたがしているのは、すでにStringsプロパティに割り当てられているオブジェクトのメソッドを呼び出すことだけです。

あなたの代わりにこれを行うにした場合:

static void Main(string[] args) 
{ 
    Customer myCustomer = new Customer(); 
    myCustomer.Strings = new List<string>(); 
} 

あなたはセッターを持っていないプロパティに新しい値を代入しようとしているので、それはコンパイルされませんがわかります。このコード行で

-1

ルック:それは、このコードのように見えるかもしれ

public List<string> Strings { get; } = new List<string>(); 

は、プロパティStringsは、文字列のリストを保持していると言っています。しかし、実際にはそうではありません。なぜなら、C#では、変数にオブジェクトが含まれていないからです。このコードは、プロパティStrings参照を文字列のリストに保持していることを示しています。

このリストに要素を追加すると、Stringsプロパティの値は変更されません。オブジェクトを変更していますが、参照を変更していません。 Stringsプロパティの値を変更していないので、セッターは必要ありません。

+0

この回答は少しばかり分かりにくいので、混乱しています。 – Enigmativity

+0

@Enigmativityそれは公正です。ご意見をいただきありがとうございます。 –

関連する問題