C#学习系列之虚方法和多态

71 阅读2分钟

C#学习系列之虚方法和多态


啰嗦

基础学习。


设计原则(六大类其中之一)

依赖倒置原则:依赖抽象类,不依赖具体类。(减少耦合) 抽象类形容为父类,而子类是父类的具体类。

基类的引用

派生类包含基类和派生类,用基类引用指向派生类。通过指向派生类的基类引用访问派生类中的基类部分。

使用

将Child child改成Parent child也是可以的,如果出现调用同名函数的话,调用就是调用基类中的函数,而不是派生类中的函数。两者根据实际使用而有所不同。

public class parent
{
	public string name;
}
public class child:parent//相当于child继承于parent
{
}
class program
{
	static void Main(string[] args)
	{
		Parent child=new Child();//将Child child改成Parent child也是可以的
		child.name="lily";//拥有父类的基础
	}
}

共性与差异

共性:派生类都是基于基类进行派生的。那么多个由同一个基类做的派生类会有共同的特性。 差异:派生类与派生类之间会存在不同的差异。

虚方法和多态的武器

虚方法:使用virtual的方法。基类的虚方法可在派生类使用override重写。允许派生类重写基类中的方法的一种特殊方法。虚方法是一种在编译时无法确定具体实现的方法,需要在运行时根据对象的实际类型来动态调用相应的实现。 多态:通过指向派生类的基类引用,调用虚函数,会根据引用所指向派生类的实际类型,调用派生类中的同名重写函数。多态性是面向对象编程中一个重要概念,允许我们使用弗雷引用变量类引用子类对象,并且在运行时根据对象的实际类型来调用相应的方法,使得代码更加灵活和可扩展。 多态性体现在:虚方法(virtual)和抽象方法(abstract)。

使用

dog和cat使用到了override进行重写,所以不会用到基类的虚方法,并且两者的speak也会有所不同。

class pet
{
	virtual public void speak();
}
class dog
{
	override public void speak();//重写基类的虚方法
}
class cat
{
	override public void speak();//重写基类的虚方法
}
pet.speak();//调用基类的
dog.speak();//调用派生类

其他

  • 重写虚方法必须具有相同的可访问性,且基类方法不能是private(派生就无法访问)
  • 不能重写static方法或非虚方法
  • 方法、属性、索引器、事件都可以声明为virtual或override

总结

学习记录。 www.imooc.com/video/14226