2012-03-28 9 views
1

noobの質問のビットが、:としてC#のupdate属性は

Iは、カスタムクラスを定義しています使用して、同じアプリケーションドメイン内の別のクラスからのタイプアイコンの列):

fm.iconData[0].setName("Plum"); 

OR国民と使用にアイコンクラスの変数の修飾子を自分のインスタンスを変更して設定することをお勧めします:

fm.iconData[0].name = "Plum"; 

これはOO設計の概念を破っていますか?

+0

あなたの質問には答えませんが、一般的には、メソッドの代わりにプロパティを使用する方に向いています。 'public string Name {get;セット; } 'またはそれ以上のもの' public string Name {private get;セット; } '。 –

答えて

2

どちらもありません。この場合、代わりに公共の場または明示的なセッター/ゲッターメソッドのプロパティを使用します。

public class Icon 
{ 
    public string Name {get;set;} 
} 

プロパティは、必要に応じて後に、あなたの内部実装を変更することができますセッター/ゲッターメソッドにダウンしてコンパイルされているので、まだカプセル化を尊重。明示的なセッター/ゲッターメソッドはC#では慣用的ではありません。

MSDN on propertiesも参照してください。

+0

ありがとうございます - プロパティについてまだ学んでいません。 – CdrTomalak

0

Nameは、単純なプロパティの明確な例です。それプロパティ(ないパブリックフィールド)を作成し、それに値を割り当てる:

fm.iconData[0].Name = "Plum"; 

は、次のように定義されたこの特性を有する:

public string Name {get;set;} 
+0

ちょうどこれは完璧なものです。私はプロパティにアクセスすることができるので、(それはカプセル化を破るだろう)パブリックインスタンス変数だったので、奇妙なことです - しかし、これがプロパティが存在するなら、私はそれで涼しいです。 – CdrTomalak

+0

プロパティは変数のように見えますが、必要に応じてより多くの機能を実行できます。それ以外の場合は、値を返すメソッドに置き換えてください。 –

0

誰もが言ったように、これはプロパティでなければなりません。あなたは(イベントを上げ、例えば検証)プロパティに余分なロジックを追加することを計画している場合は、次のようにプロパティを定義することができます:それはプライベートであるよう

public class Icon 
{ 
    string name; 
    public string Name 
    { 
     get { return name; } 
     set 
     { 
      // custom logic can go here... 
      name = value; // value is whatever has been set to this property 
     } 
    } 
} 

nameはクラスにのみ表示されます。 Nameは外部から見ることができます。