抽象类不能实例化,
abstract class Person
    {
        public Person(string name, int age)
        {
            this.Name = name;
            this.Age = age;
        }
        private string name;        public string Name
        {
            get { return name; }
            set { name = value; }
        }
        private int age;        public int Age
        {
            get { return age; }
            set { age = value; }
        }
        abstract public void SayHi();
        
    }
class Student:Person
    {
        public Student(string name, int age)
            : base(name, age)
        { 
        
        }
        public override void SayHi()
        {
            
            //throw new NotImplementedException();
            Console.WriteLine("我是学生!!!");
        }
    }
Person[] p1 = { 
                          new Student("张三",20),
                          new Teacher("老妖",20,1000),
                          new Student("李四",10)
                        };
            foreach (Person item in p1)
            {
                if (item is Student)
                {
                    Console.WriteLine("我是学生,耶!");
                }
                else if (item is Teacher)
                {
                    Console.WriteLine("我是老师,我干!");
                }
                item.SayHi();            }
            Console.Read();
           问题:抽象类不能被实例化,为什么还可以调用构造函数,不是一旦调用构造函数,就实例化了吗

解决方案 »

  1.   

    你没有实例化抽象类啊???你认为这个是吗?不是的。
    Person[] p1 = {  
      new Student("张三",20),
      new Teacher("老妖",20,1000),
      new Student("李四",10)
      };
      

  2.   

    是不是一旦调用了抽象类的构造函数就实例化了抽象类
    抽象类的构造函数不能直接调用,是在实例化子类的时候间接调用的,就是这句: base(name, age)
      

  3.   

    真正“构造”对象的是CLR,系统自动完成的。
    要不然构造函数也不会是轻轻松松写这么两行了。