过去我避免定义嵌套类。但是如果一个类只能在初级类中使用,那么将该类嵌套为理想的位置吗?关于这个问题是否有任何公认的惯例?
public class PrimaryClass
{
public class SubClass
{
// ...
}
public SubClass MySubClass { get; set; }
// ...
}
或者它应该始终是
public class SubClass
{
// ...
}
public class PrimaryClass
{
public SubClass MySubClass { get; set; }
// ...
}
答案 0 :(得分:2)
如果内部类仅在外部类中使用,则可以定义嵌套类(该类在另一个类中定义)。
答案 1 :(得分:1)
您完全正确 - 如果子类仅在主类中使用过,则最好将关注点分开。在Java中,这是一个称为匿名内部类的语言级构造。如果需要,您可以随后稍后重构子类。
比较C#和Java的wiki文章有一个非常好的分析,涵盖了一般指南和语言特定问题。 http://en.wikipedia.org/wiki/Comparison_of_C_Sharp_and_Java#Inner_and_local_classes
答案 2 :(得分:0)
如果内部类是其父外部类的固有部分,那么这样做完全没问题。我看到一个内部类就像外部类的任何其他成员一样,除了它带有自己的一组方法和属性。
例如,发动机是机动车辆的固有部件。它不能在一个外面起作用(因此没有意义),换句话说,它的存在的意义仅取决于机动车辆。我当然在这里假设发动机除了机动车之外别无其他任何东西(想不出更好的例子,对不起)。
在C#中,您当然也可以将发动机作为一个单独的类来实现,并从机动车类中引用它。这真的是你的选择。答案 3 :(得分:0)
除了仅在外部类中使用嵌套类之外,还有一些情况需要将它的实例交给外部世界。通常你使用inerface来做到这一点。以下是如何使用嵌套类和接口的示例:
public interface IDoSomething {...}
public class Outer
{
public static IDoSomething GetSomethingToDo( ... parameters ...)
{
if (...) return new SomethingA();
else return new SomethingB();
}
private class SomethingA : IDoSomething { ...}
private class SomethingB : IDoSomething { ...}
}
DoSomething
的实施完全隐藏在外部世界之外。
答案 4 :(得分:0)
我倾向于将嵌套类定义为私有,从不公开。以这种方式,嵌套类将仅由封闭类使用。只有当嵌套类被多个顶级类使用时,才将类移到顶层。然后我通常将其内部化。
应为枚举保留使用公共嵌套类。