Syl*_*gue 74 c# scope inner-classes
我对C#比较陌生,每次我开始研究C#项目(我只用C#中几乎成熟的项目)我想知道为什么没有内部类?
也许我不明白他们的目标.对我来说,内部类 - 至少是私有内部类 - 看起来很像Pascal/Modula-2/Ada中的"内部程序":它们允许在较小的部分中分解主类以便于理解.
示例:这是大多数时间看到的内容:
public class ClassA
{
public MethodA()
{
<some code>
myObjectClassB.DoSomething(); // ClassB is only used by ClassA
<some code>
}
}
public class ClassB
{
public DoSomething()
{
}
}
Run Code Online (Sandbox Code Playgroud)
由于ClassB只会被ClassA使用(至少有一段时间),我猜这个代码会更好地表达如下:
public class ClassA
{
public MethodA()
{
<some code>
myObjectClassB.DoSomething(); // Class B is only usable by ClassA
<some code>
}
private class ClassB
{
public DoSomething()
{
}
}
}
Run Code Online (Sandbox Code Playgroud)
我很高兴收到你关于这个主题的消息 - 我是对的吗?
Jon*_*eet 78
嵌套类(可能最好避免使用"内部"一词作为C#中的嵌套类与Java中的内部类有些不同)确实非常有用.
一个未提及的模式是"更好的枚举"模式 - 它可以比Java更灵活:
public abstract class MyCleverEnum
{
public static readonly MyCleverEnum First = new FirstCleverEnum();
public static readonly MyCleverEnum Second = new SecondCleverEnum();
// Can only be called by this type *and nested types*
private MyCleverEnum()
{
}
public abstract void SomeMethod();
public abstract void AnotherMethod();
private class FirstCleverEnum : MyCleverEnum
{
public override void SomeMethod()
{
// First-specific behaviour here
}
public override void AnotherMethod()
{
// First-specific behaviour here
}
}
private class SecondCleverEnum : MyCleverEnum
{
public override void SomeMethod()
{
// Second-specific behaviour here
}
public override void AnotherMethod()
{
// Second-specific behaviour here
}
}
}
Run Code Online (Sandbox Code Playgroud)
我们可以使用一些语言支持来自动完成其中的一些操作 - 这里我没有显示很多选项,比如实际上没有为所有值使用嵌套类,或者对多个值使用相同的嵌套类,但给他们不同的构造函数参数.但基本上,嵌套类可以调用私有构造函数的事实提供了很多功能.
Wim*_*nen 12
您应该限制每个类的职责,以使每个类保持简单,可测试和可重用.私人内部阶级反对.它们有助于外部类的复杂性,它们是不可测试的,并且它们不可重复使用.
归档时间: |
|
查看次数: |
64435 次 |
最近记录: |