student write net 2.0 图片 div () ons stat
定义Person类:
- class Person
- {
- public void Say()
- {
- Console.WriteLine("I am a person");
- }
- }
现在,我想定义一个Stu类, 并且继承Person类,并且我想让Stu类有属于自己的Say方法
- class Stu:Person
- {
- public string school="Oxford";
- public void Say()
- {
- Console.WriteLine("I am a student from " + school);
- }
- }
然后,在Main函数中,分别实例化Person类和Stu类
- class Program
- {
- static void Main(string[] args)
- {
- Person person = new Person();
- person.Say();
- Stu stu= new Stu();
- stu.Say();
- person=stu;
- person.Say();
- }
- }
在控制台中,输入csc Program.cs编译,如下图
(请选择你自己喜欢的编译器,并包含编译器的位置到path环境变量中,如path=%path%;C:\Windows\Microsoft.NET\Framework64\v2.0.50727)
编译后,如上图我们看到有个警告,意思是Stu类中的Say方法,隐藏了Person类中的Say方法,如果确实有需要,喊我们显示地使用new关键字去隐藏,做如下改动
- class Stu:Person
- {
- public string school="Oxford";
- public new void Say()
- {
- Console.WriteLine("I am a student from " + school);
- }
- }
编译后,没发现警告了,可运行效果并不是我想要的,最后一行的输出,并没有实现多态
现在在父类使用virtual关键字,在子类使用override关键字重写父类的方法。
- class Person
- {
- public virtual void Say()
- {
- Console.WriteLine("I am a person");
- }
- }
- class Stu:Person
- {
- public string school="Oxford";
- public override void Say()
- {
- Console.WriteLine("I am a student from " + school);
- }
- }
运行效果如下:
这样,我们通过在父类使用virtual关键字修饰方法,在子类使用override关键字重写父类方法,这样我们就正确实现了多态。
除了virtual关键字,我们还可以使用abstract关键字修饰父类的方法,可以实现相类似的功能,但abstract修饰的方法不能有实现,并且该方法所在的类必须是abstract类
扯不清楚的virtual和abstract
student write net 2.0 图片 div () ons stat
原文:http://www.cnblogs.com/yshuangj/p/7979613.html
来源: http://www.bubuko.com/infodetail-2417837.html