c#面向对象编程问题

时间:2012-07-20 14:58:29

标签: c# class object nested

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

我定义了两个类。第一个如下:

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

}

和第二个:

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

}

这是实现这两个类的正确方法吗?或者更好地实现嵌套类?如果是,如何使用嵌套类在“Main”中声明相同的结果?

2 个答案:

答案 0 :(得分:1)

您是否拥有嵌套类没有太大区别。它只会改变您访问类类型的方式,但不会改变类的行为。嵌套类不会看到封闭类的成员,除非它有对它的引用。

说,我们有这个嵌套类

public class Containing
{
    public class Nested
    {
    }
}

现在,您可以使用

Containing以外的地方访问该课程
Containing.Nested obj = new Containing.Nested();

包含类的行为类似于命名空间。对于其他嵌套类型也是如此。如果嵌套类型与包含类紧密绑定,我只会使用嵌套类型。一个很好的例子是仅在特定类中使用的enum

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

    public MyValueType MyValue { get; set; }
}

您的Content课程可能就是这种情况。由您决定是否使您的代码更易于理解和更好的结构化。

答案 1 :(得分:1)

我通常只使用嵌套类,如果一个类完全是另一个类的实现细节 - 在这种情况下我将嵌套类设为私有。如果一个类需要在另一个类之外使用,那么在这种情况下我通常不会有嵌套类。

异常可能是适用于另一个类,委托签名或EventArgs派生类的枚举。

但是,在很大程度上它是风格的。如果您发现嵌套在另一个类中的一个类提供了更好的可读性或可维护性,那么它实际上是个人选择。