日期:2014-05-18  浏览次数:20901 次

C#基础问题希望得到您的帮助1
抽象类不能实例化,
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();
  问题:抽象类不能被实例化,为什么还可以调用构造函数,不是一旦调用构造函数,就实例化了吗

------解决方案--------------------
构造函数不是用来“构造”或者“实例化”对象的。
相反,构造函数是实例化对象之后被调用的。

类似的,析构函数是销毁对象之前调用的,而不是销毁对象用的。

所以你可以在构造函数中访问本类的成员,它们都初始化好了。