最近在看《C#入门经典.第5版.(Beginning.Visual.C#.2010)》,刚开始学 C# 不久,技术比较菜。望各位大牛能指点一下。这里先万分感谢了。
我的问题是这样的,按抽象的定义是不能创建对象的,可以为什么书上的 Demo (如下),可以用创建抽象类的数组?而且还不报错。
namespace Ch11Ex01
{
   public abstract class Animal
   {
      protected string name;      public string Name
      {
         …namespace Ch11Ex01
{
   class Program
   {
      static void Main(string[] args)
      {
         Console.WriteLine("Create an Array type collection of Animal " +
                           "objects and use it:");         Animal[] animalArray = new Animal[2]; //为什么这行代码却没有任何错误呢?还能编译通过。
         Animal myObj = new Animal(); //编译也无法过,报错
C#技术

解决方案 »

  1.   

    抽象类不能创建实例,但是他是有构造函数的。
    数组一个新的对象,而不是抽象数组,
    如果你用 public abstract CustomCollection:List<T>
    {}他是就不可以初始化了。如果是你的 CustomCollection[] coll = new CustomCollection[]{};
    因为就不是一个对象。
      

  2.   

    Animal是一个类,继承于Object。
    Animal[]也是一个类,继承与Array,Array继承与Object。这两个类本身一点关系都没有,只有一点联系,就是Animal[]可以放Animal类型的实例。
      

  3.   

    Animal[] animalArray = new Animal[2];  数组里面两个都会是 null
      

  4.   

    namespace Ch11Ex01
    {
       public abstract class Animal
       {
          protected string name;      public string Name
          {
             …namespace Ch11Ex01
    {
       class Program
       {
          static void Main(string[avxrt.com] args)
          {
             Console.WriteLine("Create an Array type collection of Animal " +
                               "objects and use it:");         Animal[] animalArray =www.aqirt.com[2]; //为什么这行代码却没有任何错误呢?还能编译通过。
             Animal myObj = new Animal(); //编译也无法过,报错
      

  5.   

    创建一个数组,不过是创建一个数组而已,并没有创建Animal对象!