class 子类 : 父类
{
// ...
}
// 超类:人
class Person
{
public string Name;
public int Age;
public void Speak()
{
Console.Write("我叫{0},今年{1}岁。", Name, Age);
}
}
// 子类:老师(老师也是人,具备人的特征和行为,故直接继承超类Person,省略重复的编码)
class Teacher : Person
{
public string Subject; // 教学科目
// 上课
public void ClassBegin() {
Speak();
Console.WriteLine("我是你们的{0}老师,现在开始上课。", Subject);
}
}
// 某方法内↓↓↓
Teacher tec = new Teacher();
tec.Name = "Mr.Bai";
tec.Age = 24;
tec.Subject = "C/C++/Java/C#";
tec.ClassBegin(); // 我叫Mr.Bai,今年24岁。我是你们的C/C++/Java/C#老师,现在开始上课。
// 使用2里面的栗子
Person person = new Teacher();
// 但是父类不能直接点子类的特征和行为,请继续看3.2
is
和 as
关键字is
:判断一个对象是否是指定类型的对象
bool
Console.WriteLine(tec is Person); // True
as
:将一个对象转换为指定类对象
指定类型对象
or null
Teacher teacher = person as Teacher;
if(person is Teacher){
// 第一种写法
Teacher t = person as Teacher;
t.ClassBegin();
// 第二种写法
(person as Teacher).ClassBegin();
}
除了 关键字 不同,其他都是各门语言相通的
base
关键字 调用父类构造// 超类:人
class Person
{
public string Name;
public int Age;
// 父类构造
public Person(string name, int age){
// ...
}
}
// 子类:老师
class Teacher : Person
{
public string Subject; // 教学科目
// 子类构造
public Teacher(string name, int age, string subject) : base(name, age)
{
// ...
}
}
object
,是 Object
的别名
secled