【问题标题】:How can I automatically create a sub class in C#?如何在 C# 中自动创建子类?
【发布时间】:2012-09-02 05:21:49
【问题描述】:

我有以下代码:

public class Page {
    public string FilePath { get; set; }
    public int RoleNumber { get; set; }
    public class Navigation {
        public string Menu { get; set; }
        public string Breadcrumbs { get; set; }
    }
}

每次创建 Page 类的新实例时,我总是需要 Navigation 类。有没有办法自动创建导航类?

【问题讨论】:

  • 但是你已经有了一个“子类”。你到底想用它做什么?
  • 但是即使我创建了主类,子类也不存在。我想要做的是有一个方法来创建菜单和面包屑,然后将它们都返回。因为它只能返回一件事,所以我认为返回不止一件事的唯一方法是将它们放在一个类中并返回该类。
  • @Angela 你不需要把类定义放在Page里面,你需要一个类的instance
  • @dbaseman - 但导航将始终是页面的一部分。我在想把东西放在一起,最好把 Navigation 作为一个子类。
  • 仅供参考,术语“子类”通常是指扩展另一个类的类,而不是像您在此处那样在定义中创建的内部类。

标签: c# oop composition


【解决方案1】:

看起来在这种情况下最好使用继承。您不想陷入冗余代码的情况。

public class Navigation {
    public string Menu { get; set; }
    public string Breadcrumbs { get; set; }
}

public class Page : Navigation {
    public string FilePath { get; set; }
    public int RoleNumber { get; set; }    
}

或者,您可以在Page 的构造函数中实例化Navigation 的实例:

public class Page {
    public Navigation PageNavigation { get; private set; }
    public string FilePath { get; set; }
    public int RoleNumber { get; set; }    

    public Page() {
        PageNavigation = new Navigation();
    }

    public class Navigation {
        public string Menu { get; set; }
        public string Breadcrumbs { get; set; }
    }
}

【讨论】:

  • 这是两种截然不同的方法。继承对我来说不合适;我认为构图方法是正确的。
  • 请原谅我的基本知识,但人们通常使用下划线命名私有变量。也感谢您的建议。
  • 导航类将始终是页面的一部分,永远不会在页面上下文之外使用。让他们两个在一起对我来说不是最好的吗?
  • @Angela 是的,你是对的。我取出了私有变量,因为这里的 getter/setter 似乎更简洁。
  • @Angela 当然,如果是这样的话,那么将Navigation 的定义保留在Page 中,并添加它的一个实例(更新了我对这种情况的答案)。
猜你喜欢
  • 2011-05-13
  • 1970-01-01
  • 2013-09-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多