【问题标题】:.NET Nested Classes.NET 嵌套类
【发布时间】:2009-01-18 21:28:12
【问题描述】:

我正在处理的当前类库将有一个基类(字段),其中包含 50 多个特定的“字段”类型,这些类型将从“字段”继承并嵌套以保持可读性。比如……

abstract class Field
{
    public int Length { get; set; }

    public class FieldA : Field
    {
        public static void DoSomething()
        {
            Console.WriteLine("Did something.");
        }
    }
}

到目前为止,一切看起来都不错,我可以使用如下所示的代码:

class Program
{
    static void Main(string[] args)
    {
        Field.FieldA.DoSomething();
    }
}

但是,为什么这也有效?这里发生了什么,允许编译器/IDE 智能感知继续链接这些“FieldA”?

class Program
{
    static void Main(string[] args)
    {
        Field.FieldA.FieldA.FieldA.FieldA.FieldA.FieldA.FieldA.DoSomething();
    }
}

这绝不是应用程序破坏,但认为它很奇怪。在 Boo 中做同样的事情(这是用于库的实际语言)。

【问题讨论】:

  • 大声笑,这实际上很酷。必须自己测试才能相信它:p
  • 您的方法是合理的,特别是如果您想控制谁可以派生:将基本构造函数设为私有,并且只有嵌套类型可以从中派生。当我尝试使用更丰富的 OO 语义来模拟“枚举”行为时,我会使用类似的东西。
  • 让我想起了“月亮指导学生”
  • 我有明显的逻辑疏忽。感谢您的回复。
  • 内部构造函数也会限制谁可以继承它......

标签: c# .net boo nested-class class-structure


【解决方案1】:

听起来你想要这样的东西:

abstract class Field
{
    public int Length { get; set; }
}

public class FieldA : Field
{
    public static void DoSomething()
    {
        Console.WriteLine("Did something.");
    }
}

否则,您将定义一个包含内部类的基类,继承者也将获得该内部类。所以当你从外部类继承来创建内部类时,你就开始了一个循环。

【讨论】:

  • 这就是我害怕发生的事情。我想我必须找到另一种嵌套类的方法。感谢您的回复。
【解决方案2】:
  1. Field 有一个名为 FieldApublic 嵌套类
  2. FieldA 继承自 Field
  3. 因此您可以随时从FieldA 访问FieldA

引用并没有创建无限链,它只是指向同一个类。 (some test code)

当你访问FieldA.FieldA时,后者FieldA是可以访问的,因为前者FieldAField的一个实例,所以后者FieldA实际上是访问Field.FieldA

【讨论】:

    【解决方案3】:

    FieldA 继承对 FieldA 类的引用,FieldA 继承对 FieldA 类的引用,FieldA 继承对 FieldA 类的引用,FieldA 继承对 FieldA 类的引用,FieldA 继承对 FieldA 类的引用,FieldA 继承对 FieldA 类的引用,FieldA 继承了对类 FieldA...

    它之所以有效,是因为 这是你告诉它去做的。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-06-10
      • 2011-06-12
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多