C# abstract和virtual

abstract(修饰的类称为抽象类)
1.abstract修饰的类不能被实例化,只能被继承(可以用在Base类,不去实例化,只是被继承)
2.abstract修饰的类中必须实现每一个abstract修饰的方法
3.abstract修饰的方法是没有实现的,只能在抽象类中声明,并且该方法 必须在继承的子类中重写
4.抽象类中可以写普通的方法(抽象方法必须在抽象类中,抽象类中不一定必须由抽象方法)
5.抽象类的构造函数可以省略,编译器默认加上,抽象类的构造函数只能是普通方法
 
virtual(虚函数声明)
1.声明了virtual的父类方法可以被子类重写(override)(非强制的)
2.virtual可以修饰方法,属性,索引,不可以修饰类
3.virtual不可以和static一起修饰
 
代码示例:
    public abstract class demoFatnerClass
    {
        public void func()      //普通方法 
        {
            Console.WriteLine("father's ordinary fun.");
        }
        public virtual void virFunc()    //虚函数 选择性被子类重写
        {
            Console.WriteLine("father 's virtual fun.");
        }
        public abstract void absFunc();    //抽象方法 子类必须重写该方法不写编译器会报错
    }
 
    public class demoSonClass:demoFatnerClass
    {
        public override void absFunc()    //重写抽象方法
        {
            Console.WriteLine("son overriden abstract function.");
        }
        public override void virFunc()     //重写父类虚函数,可以不写
        {
            Console.WriteLine("son overriden virtual function.");
        }
    }
 
class Program
    {
        static void Main()
        {
            demoSonClass son = new demoSonClass();
            son.func();
            son.absFunc();
            son.virFunc();
            Console.ReadKey();
        }
    }
 
输出:
 
 

猜你喜欢

转载自www.cnblogs.com/lsill/p/10741461.html
今日推荐