gpt4 book ai didi

c# - C# 中的私有(private)内部类 - 为什么不经常使用它们?

转载 作者:IT王子 更新时间:2023-10-29 03:40:47 32 4
gpt4 key购买 nike

我对 C# 比较陌生,每次开始做 C# 项目时(我只用 C# 做过几近成熟的项目)我想知道为什么没有内部类?

也许我不明白他们的目标。对我来说,内部类——至少是私有(private)内部类——看起来很像 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()
{
}
}

由于 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()
{
}
}
}

我很高兴收到你关于这个问题的消息 - 我说得对吗?

最佳答案

嵌套类(可能最好避免使用“内部”一词,因为 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
}
}
}

我们可以通过一些语言支持来自动完成其中的一些工作——还有很多选项我没有在这里展示,比如实际上不对所有值使用嵌套类,或者对所有值使用相同的嵌套类多个值,但给它们不同的构造函数参数。但基本上,嵌套类可以调用私有(private)构造函数这一事实赋予了很大的力量。

关于c# - C# 中的私有(private)内部类 - 为什么不经常使用它们?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/454218/

32 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com