1

我正在研究的当前类库将有一个基类(字段),其中包含 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 中做同样的事情(这是用于库的实际语言)。

4

3 回答 3

4

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

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

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

否则,您将定义一个包含内部类的基类,继承者也将获得它。因此,当您从外部类继承以创建内部类时,您正在开始一个循环。

于 2009-01-18T21:34:04.093 回答
2
  1. Field有一个名为的公共嵌套类FieldA
  2. FieldA继承自Field
  3. 因此您始终可以FieldAFieldA.

引用并没有创建无限链,它只是指向同一个类。(一些测试代码

当您访问FieldA.FieldA时,后者FieldA是可访问的,因为前者FieldA是一个实例,Field因此后者FieldA实际访问Field.FieldA

于 2009-01-18T21:35:16.387 回答
1

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

它之所以有效,是因为这就是您告诉它要做的事情。

于 2009-01-18T21:37:34.663 回答