2017-05-10 7 views
-2

私は自動実装されたプロパティに疑問を持っています。なぜ最初に取得してから値を設定するのですか?なぜC#の自動実装されたプロパティでアクセサーが必要なのですか?

+5

あなたは何を求めていますか? – ColinM

+0

Get aプロパティを持たないSetがある場合、そのプロパティを含むクラスの外部ではあまり有効ではありません。 – Crowcoder

+2

設定する前にまず「取得」する必要はありませんか? – Wheels73

答えて

1

あなたが投稿したものは、オートプロパティではありません。

以下は、1つの自動プロパティと、実行したのと同様のカスタムプロパティを含むサンプルクラスです。

public class MyPropertyClass 
{ 
    public MyPropertyClass(bool affectLogic) 
    { 
     _affectLogic = affectLogic; 
    } 
    private readonly bool _affectLogic; 

    public string MyAutoProperty { get; set; } 

    private string _myPropertyWithLogic; 
    public string MyPropertyWithLogic 
    { 
     get 
     { 
      if (_affectLogic) 
       _myPropertyWithLogic = "Some value"; 

      return _myPropertyWithLogic; 
     } 
     set 
     { 
      if (_affectLogic) 
      { 
       _myPropertyWithLogic = "Some value"; 
      } 
      else 
      { 
       _myPropertyWithLogic = value; 
      } 

     } 
    } 
} 

autoproperty "MyAutoProperty"は、プロパティ値を取得して設定するためのメカニズムを提供します。

特定の条件に基づいてプロパティ値を操作または返すことができる標準プロパティに投稿したもの。あなたの投稿では、投稿された値が設定前にnullであるかどうかを確認しています。

クラス外のプロパティにアクセスする必要がない場合は、getメソッドを使用する必要はありません。 getを削除すると、 "WriteOnly"プロパティが作成されますが、これは悪い習慣です。

"警告"値を受け入れるクラスでパブリックメソッドを作成します。クラス外のプロパティにアクセスする必要がない場合は、プロパティをまったく作成しないでください。

public void SetMyProperty(string value) 
{ 
    _myPropertyWithLogic = value; 
} 
関連する問題