4

ほとんどすべてのクラスで、プロパティと内部クラス変数が混在しています。私は常に、「外部で必要な場合はプロパティ、そうでない場合はクラス変数」というルールに従って、どちらかを選択してきました。しかし、これを頻繁に再考させる他の多くの問題があります。

  • ある時点で、クラスの外部から内部変数を使用したいので、それをプロパティにリファクタリングする必要があります.とにかくほとんどのクラスは内部クラスであるため、API で公開されていないため、内部変数がクラスの外部からアクセスできるかどうかは問題ではありません。

  • しかし、C# では定義内のプロパティなどをインスタンス化できないためList<string>、これらのプロパティは可能なすべてのコンストラクターで初期化する必要があります。一箇所

  • C# コードは、コンストラクター/メソッド パラメーターがキャメル ケースであり、templateIdCodeそれがローカル変数、メソッド パラメーター、または内部クラス変数 (たとえば、TemplateIdCode = templateIdCodeこれがクラス プロパティに割り当てられているパラメーターであることがわかると、より簡単になります。これは、常に内部クラスのプロパティのみを使用するための引数です。

例えば:

public class TextFile
{
    private string templateIdCode;
    private string absoluteTemplatePathAndFileName;
    private string absoluteOutputDirectory;
    private List<string> listItems = new List<string>();

    public string Content { get; set; }
    public List<string> ReportItems { get; set; }

    public TextFile(string templateIdCode)
    {
        this.templateIdCode = templateIdCode;
        ReportItems = new List<string>();
        Initialize();
    }
    ...

内部 (非 API) クラスを作成する場合、内部クラス変数またはプロパティを作成する必要があるかどうかを決定する際の戦略は何ですか?

4

1 に答える 1

1

後でパブリック アクセスが必要なプライベート変数がある場合は、それをプライベート メンバーとして使用するプロパティを作成します。例:

private List<string> listItems = new List<string>();

Public List<string> ListItems
{
     get{return listItems;}
     set{listItems = value;}
}

これにより、コードをリファクタリングすることなく、データへのパブリック アクセスを作成できます。また、コンストラクターで行う必要がなく、プライベート メンバーでデータを初期化することもできます。
もう 1 つの利点は、パブリック プロパティにアクセスするすべてのユーザーに対して実行するデータの変更を、プロパティのゲッターで実行できることです。VS2008 では機能として自動プロパティが導入されましたが、私は依然として VS2005 スタイルのプロパティを好みます。

于 2010-05-23T10:22:27.067 に答える