继承是实现代码重用的重要机制,使用继承可以在类之间建立一种相交关系。
- 一个类可以继承于另一个类,分别是子类和父类,子类可以对父类进行扩展和自定义
- 子类可以重用父类的功能
- C#里,一个子类只可以有一个父类,父类可以有多个子类
- 构造函数和析构函数不能被继承
现代人 ak = new 现代人 { gohunting = "猎杀野猪", max = 999 };
Console.WriteLine(ak.gohunting);
Console.WriteLine(ak.max);
鲲鲲 m4 = new 鲲鲲 { gohunting = "m4",Max = 99.99 };
Console.WriteLine(m4.gohunting);
Console.WriteLine(m4.Max);
public class 山顶洞人
{
public string gohunting;
}
public class 现代人:山顶洞人
{
public int max;
}
public class 鲲鲲:山顶洞人
{
public double Max;
}
在这段程序里,创建了一个山顶洞人,相当于是一个父类,拥有gohunting这个属性
public class 山顶洞人
{
public string gohunting;
}
然后创建两个子类,继承了父类的gohunting属性
public class 现代人:山顶洞人
{
public int max;
}
public class 鲲鲲:山顶洞人
{
public double Max;
}
然后就可以创建实例,既可以使用父类的属性,也可以用自己的属性
现代人 ak = new 现代人 { gohunting = "猎杀野猪", max = 999 };
Console.WriteLine(ak.gohunting);
Console.WriteLine(ak.max);
鲲鲲 m4 = new 鲲鲲 { gohunting = "m4",Max = 99.99 };
Console.WriteLine(m4.gohunting);
Console.WriteLine(m4.Max);
多态
面对对象的三大特性之一,同一操作作用于不同的类的实例,不同的类将进行不同的解释,最后产生不同的执行结果。
C#通过继承实现多态性
关键字 as强制类型转换 is判断数据类型
注意 as无法进行自定义转换
例如 int x = 3 as long 这样就是不行的
is操作符 通常用于向下转换前的验证
例如 if(a is dog)
Console.WriteLine(((dog)a).xxx)
如果拆箱转换成功的话,那么例如上条的操作结果就是true
引用转换:创建一个新的引用,它也指向同一个对象
向上转型(一个对象的引用可以隐式的转换到其父类的引用)
dog d = new dog();
Console.WriteLine(d);
Animal da = d;
Console.WriteLine(da == d );
因为Animal是dog的父类,dog有动物的所有特性,所以dog本身就是Animal,它直接就进行了隐式转换
变量da依旧指向同一个对象dog
由于父类没有子类的属性,所以da的可视范围更小一些,毕竟它调用不了子类
向下转型(像转换到子类的引用则需要显示转换)
Animal a = new Animal();
dog d = new dog();
Animal da = d;
//dog s = (dog) da;两种转换方法
dog s = d as dog;//如果类型不匹配,转换失败,则不会报错,值变成null
Console.WriteLine(s == da);
Console.WriteLine(s == d);