几行代码帮你搞懂C#中的接口、抽象类(抽象方法)、虚函数
TestImplement1 Test1 = new TestImplement1();
TestImplement2 Test2 = new TestImplement2();
Test1.fun1(); //子类1调用基类中的普通方法1,该方法时对接口的实现
Test2.fun1(); //子类2调用基类中的普通方法1,该方法时对接口的实现
Test1.fun2(); //子类1调用基类中的普通方法2,该方法时对接口的实现
Test2.fun2(); //子类2调用基类中的普通方法2,该方法时对接口的实现
Test1.fun3(); //子类1调用普通方法3,该方法由子类自己定义
Test2.fun3(); //子类2调用普通方法3,该方法由子类自己定义
Test1.fun4(); //子类1调用抽象方法
Test2.fun4(); //子类2调用抽象方法
Test1.fun5(); //子类1没有重写基类中的虚方法5,因此这里调用的是基类的fun5
Test2.fun5(); //子类2重写了虚方法5,所以调用的是重写后的方法
public interface IBase //继承IBase中的方法全部要实现
{
public void fun1();
public void fun2();
}
public abstract class Base : IBase
{
public void fun1()
{
Console.WriteLine("这是对接口的第一个方法实现");
}
public void fun2()
{
Console.WriteLine("这是对接口的第二个方法实现");
}
public void fun3()
{
Console.WriteLine("这是子类的一个普通方法");
}
public abstract void fun4();
public virtual void fun5() //虚方法必须要有实现
{
Console.WriteLine("这是基类提供的一个虚方法");
}
}
public class TestImplement1 : Base
{
public override void fun4() //强制重写方法fun4
{
Console.WriteLine("子类1重写抽象方法fun4");
}
}
public class TestImplement2 : Base
{
public override void fun4() //强制重写方法fun4
{
Console.WriteLine("子类2重写抽象方法fun4");
}
public override void fun5() //非强制,但也可以重写
{
Console.WriteLine("这里是子类重写了基类中fun5中的虚方法,不是强制要重写");
}
}
宝,你肯定懂了,对吧?
什么,没懂,没事再看一遍!
又看了一遍,还不懂?宝,要不咱再看一遍
第三遍了,宝你一定懂了。什么还是不懂,宝如果我是你,我就取关了这傻逼博主了,写的什么垃圾。
如果有的代码你看三遍还是不懂,不用怀疑,写代码的那人就是个垃圾,换个人的博客看看。