ARTICLE DETAIL

资讯详情

深耕编程入门与网站建设的一线实战洞察。

C# 抽象类和虚方法

C# 抽象类和虚方法 1.抽象类//C#中可以创建抽象类,用来提供类的部分抽象成员,当某一个类继承自这个抽象类,需要手动实现这个类中的抽象成员//抽象类;就是设计为被继承的类,抽象类只能被用作其他类的基类//使用abstract clss 创建一个抽象类//抽象类不能被实现(不能被new)//抽象类天生就是用来当作被继承的父类的,当作模板,只允许子类去newColorPrinterp1newColorPrinter();//实例化的时候会自动调用构造函数p1.Print(666);//打印出彩色的666p1.Print2(777);//ColorPrinter里面的一个普通方法777Printerp2newColorPrinter();//默认打印机p2.Print(666);//打印出彩色的666//父类变量指向子类实例时,调用Print2仍然执行父类版本p2.Print2(777);//Printer里面的一个普通方法//抽象类可以和普通类一样,有普通方法 字段 属性 构造函数//抽象类和普通类最大的区别在于 抽象类可以拥有抽象方法//给某个方法前加一个abstract,这个方法就是抽象方法, 抽象方法只作声明,不需要也不能拥有方法体(实现内容), 规定子类必须完成该功能不能写成private私有的//抽象类和普通类最大的区别在于 抽象类可以拥有抽象方法abstractpublicvoidPrint(stringvalue);//不用加花括号publicvoidPrint2(stringvalue){Console.WriteLine(Printer里面的一个普通方法);}//虽然抽象类不能被new,但是子类实例化的时候依然可以调用父类的构造函数,用来初始化父类属性publicPrinter(){Console.WriteLine(默认打印机);}//当某个类继承自一个抽象类时必需实现这个抽象类中所有的抽象方法classColorPrinter:Printer{ //override重写 实现抽象类中的抽象方法publicoverridevoidPrint(stringvalue){Console.WriteLine(打印出彩色的value);}//普通方法 可以不实现(使用的就是父类的方法) 也可以实现 ( 使用的就是当前类的这个普通方法, 覆盖 )publicvoidPrint2(stringvalue){Console.WriteLine(ColorPrinter里面的一个普通方法value);}2.虚方法//类的动态多态是由虚方法重写实现的//虚方法可以定义在普通类中,可以理解成一个普通类中的抽象方法,只是这个方法可以在父类中实现,也可以在子类中实现//普通方法是根据左边变量的类型(编译时)决定的,虚方法是右边对象的类型(运行时)决定的Peoplep2 newChinese();p2.Test();//父类的普通方法p2.Speak();//您吃了吗?p2.Speak1();//你好Chinesep3 newChinese();p3.Test();//子类的普通方法p3.Speak();//您吃了吗?p3.Speak1();//new的Sprak1//给某个方法添加一个关键字virtual,把这个方法修饰成虚方法,虚方法可以直接在父类中实现publicvirtualvoidSpeak(){Console.WriteLine(你好!);}publicvirtualvoidSpeak1(){Console.WriteLine(你好);}//new override//new当子类中有和基类中相同的成员时,编译器有警告如果有隐藏,请用new关键字普通方法虚方法都可以//new隐藏基类的成员 子类和基类各持一份 ,变量是什么类型,使用对应类型的方法//override重写基类的抽象方法和虚方法表示覆盖基类成员,只此一份,不管是什么类型,都只有这一个classChinese:People{publicnewvoidTest(){Console.WriteLine(子类的普通方法);}publicoverridevoidSpeak(){Console.WriteLine(您吃了吗?); }publicnewvoidSpeak1(){Console.WriteLine(new的Sprak1); }}
返回列表