0
class Program
{
    static void Main(string[] args)
    {
        Master m = new Master(37);
        Content c = new Content(m);
    }
}

私は2つのクラスを定義しています。最初は次のとおりです。

internal class Content 
{
    private Master _parentMaster;

    private Content _contentChildren;

    #region Constructor

    internal Content(Master master)
    {
        this._parentMaster = master;
    }
    internal Content(Master master, long contentId)
    {
        this._parentMaster = master;
        _getContent(contentId);
    }

    #endregion

    #region Private Methods

    private void _getContent(long contentId)
    {
        contentRepository.getContent(contentId, _parentMaster.MasterId);
    }

    #endregion

    #region Internal Methods

    internal void AddContent()
    {
        // code omitted
    }
    internal void UpdateContent()
    {
        // code omitted
    }

    internal void GetChildren()
    {
        // code imitted
    }
    internal void GetRootContent()
    {
        // code omitted
    }

    #endregion

    #region Properties

    // code omitted

    #endregion

}

そして2番目のもの:

public class Master
{
    private MasterEntities _master;
    private List<Master> _masters;

    #region Constructor

    internal Master()
    {
        _master = new MasterEntities();
    }
    internal Master(long masterId)
    {
        _getMaster(masterId);
    }

    #endregion

    #region Private Methods

    internal void _getMaster()
    {
            // code omitted
    }

    #region Properties

    internal long MasterId
    {
        get
        {
            return _master.id;
        }
        set
        {
            _master.id = value;
        }
    }
    // code omitted

    #endregion

}

これは 2 つのクラスを実装する正しい方法ですか? または、ネストされたクラスを実装する方が良いでしょうか? はいの場合、ネストされたクラスで「メイン」に記載されているのと同じ結果を得るにはどうすればよいですか?

4

2 に答える 2

1

私は通常、一方のクラスが完全に他方の実装の詳細である場合にのみネストされたクラスを使用します。その場合、ネストされたクラスをプライベートにします。クラスを別のクラスの外部で使用する必要がある場合、通常、そのような状況でネストクラスを使用することはありません。

例外は、別のクラス、デリゲート署名、またはEventArgsから派生したクラスに適用される列挙型である可能性があります。

しかし、ほとんどの場合、それは文体です。あるクラスを別のクラスにネストすると、読みやすさや保守性が向上することがわかった場合、それは本当に個人的な選択です。

于 2012-07-20T16:07:36.127 に答える
1

ネストされたクラスがあるかどうかは大きな違いではありません。クラス型にアクセスする方法を変更するだけで、クラスの動作は変更しません。ネストされたクラスは、それへの参照がない限り、囲んでいるクラスのメンバーを認識しません。

たとえば、このネストされたクラスがあるとします

public class Containing
{
    public class Nested
    {
    }
}

Containingwithの外部からクラスにアクセスできるようになりました

Containing.Nested obj = new Containing.Nested();

包含クラスは名前空間と同様に機能します。これは、他のネストされた型にも当てはまります。入れ子になった型が含まれているクラスにしっかりとバインドされている場合にのみ、入れ子になった型を使用します。良い例はenum、特定のクラスでのみ使用される です。

public class SomeData
{
    public enum MyValueType
    {
        Aaa, Bbb, Ccc
    }

    public MyValueType MyValue { get; set; }
}

これは、あなたのContentクラスにも当てはまります。これにより、コードがより理解しやすく構造化されるかどうかを判断するのは、あなた次第です。

于 2012-07-20T15:40:40.013 に答える