【问题标题】:C# abstract class, works with array initializationC# 抽象类,使用数组初始化
【发布时间】:2011-05-01 07:08:43
【问题描述】:

我们知道我们不能创建abstract class 的实例。

我只想知道,如果我们创建抽象类的数组,它肯定会工作。

例如

public abstract class Creator
{
    public abstract void DoSomething();
}

Creator creator = new Creator(); // this will give you compilation error!

Creator[] creator = new Creator[2]; // this will SURE work and will NOT give you compilation error.

谁能告诉我为什么会发生这种情况以及为什么它与数组初始化一起工作?

提前致谢。

【问题讨论】:

    标签: c# oop design-patterns abstract-class


    【解决方案1】:

    在 C# 中,数组不同于基本类型。 CreatorCreator[] 是两种不同的类型。 只有Creator 是抽象的。 Creator[] 不是抽象的,所以你可以创建它的实例。

    【讨论】:

      【解决方案2】:
      Creator[] creator = new Creator[2];
      

      只需初始化一个数组来保存 Creator 类的两个实例。它实际上并没有为您实例化该类的任何实例。在您初始化它们之前,这两个元素仍将是 null

      【讨论】:

        【解决方案3】:

        这里要记住的是,您不是在创建任何Creator 的实例,而是在创建这些类型的数组,其值为null

        【讨论】:

          【解决方案4】:

          初始化期间存储在数组中的值都将是null,因此这实际上并没有创建抽象类的任何实例。数组初始化对应于以下(正确)行:

          Creator creator = null;
          

          创建AbstractClass[] 类型的数组实际上非常有用,因为您可以在数组中存储对某些具体(继承)类的引用。例如:

          var objects = new object[2];
          objects[0] = "Hello";
          objects[1] = new System.Random();
          

          然后您可以例如遍历 objects 数组并在所有对象上调用 ToString()

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 2016-05-21
            • 2013-12-30
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多