C#中虚⽅法(virtual )详解
前⾔;在前⾯的博客中提到了虚⽅法和,本博⽂详细介绍下虚⽅法:
⽬录:
⼀.虚⽅法的定义:当有⼀个定义在类中的函数需要在继承类中实现时,可以使⽤虚⽅法,虚⽅法是使⽤关键字virtual 声明的,虚⽅法可以在不同的继承类中有不同的实现,即为基类中定义的允许在派⽣类中重写的⽅法;
⼆.虚⽅法的声明:
⼀般的声明形式如下:writeline方法的作用
举例:
三.虚⽅法的调⽤:
调⽤上,使⽤⼦类构造的对象调⽤虚⽅法,就会调⽤⼦类的⽅法,使⽤⽗类构造的对象,就会调⽤⽗类的⽅法;(在规则 4 中有举例说明) 1.在基类中声明的虚⽅法⼀般在派⽣类中对其进⾏调⽤,会运⽤到base
关键字: 当输⼊访问修饰符和override后,系统会⾃⼰弹出我们刚才编写的虚⽅法,直接进⾏选择即可: 2.在运⾏时进⾏调⽤:
四.虚⽅法的规则:
1. 虚拟类其实指的是正常类中的虚拟⽅法,所以虚拟类可以直接使⽤实例,这是与抽象类不同的⼀点; 它不会像抽象类⼀样进⾏报错
2. 虚
拟⽅法是在⽅法前加virtual关键字,对⽅法进⾏声明,说明这个⽅法为虚⽅法;
3. 虚拟函数和正常函数⽆区别;
4. ⼦类继承虚拟类可以实现虚拟⽅法也可以不实现虚拟⽅法; 如下代码所⽰,在调⽤虚⽅法时,对虚⽅法进⾏了重写,这样代码执⾏下来的就是⼦类的⽅法⽽不是⽗类的虚⽅法:::访问修饰符 virtual 函数返回类型 函数名(参数表) {函数体}; class Person { public virtual void XXX () { Console .WriteLine ("我有⼀个梦想,那就是动⾝去往远⽅!!"); }
}
1
2
3
4
5
6 class Person { public virtual void XXX ()//虚⽅法 { Console .WriteLine ("我有⼀个梦想,那就是动⾝去往远⽅!!"); } } class Boy : Person //继承person { public override void XXX ()//虚⽅法调⽤ { base .XXX (); }
}
1
2
3
4
5
6
7
8
9
10
11
12
13
结果如图所⽰:
但是如果我们采⽤base关键字进⾏调⽤的话就会有以下的结果:
结果如下:它调⽤了⽗类/基类的虚⽅法
5. 虚⽅法可以在不同的继承类中有不同的实现; 我们在以上案例中继续进⾏添加调⽤虚⽅法: class Person { public virtual void XXX () { Console .WriteLine ("我有⼀个梦想,那就是动⾝去往远⽅!!"); } } class Boy : Person { public override void XXX () { Console .WriteLine ("我不想继承⽗类的虚⽅法"); } public void SSS () { Console .WriteLine ("不学习就不会进步,不仅不就没有出⼈头地的机会"); } } class Program { static void Main (string [] args ) { Person person = new Person ();//实例化的虚⽅法类 Boy boy = new Boy ();//实例化的⼦类 boy .XXX ();//调⽤了⼦类的⽅法 boy .SSS (); Console .ReadLine (); }
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28 public override void XXX () { base .XXX (); // Console.WriteLine("我不想继承⽗类的虚⽅法");
}
1
2
3
4
当然别忘记实例化哦,我在这⼉就不写实例化的代码了,但是千万不能忘记哦!! 运⾏结果:
五.虚⽅法注意事项:
1.
⼀定要注意,只有为虚⽅法时可以进⾏重写,不能对⾮虚⽅法进⾏重写;
2. 虚⽅法在形式上在⽅法名前加virtual 修饰;
3. 虚⽅法⼀般在基类定义,在派⽣类中实现具体操作,派⽣类实现该⽅法时,要⽤override 对其⽅法进⾏修饰;
4. 当⽤virtual 修饰后,不允许再有 static 、abstract 或者 override 修饰符;
六.虚⽅法的好处:
当在基类中进⾏虚⽅法的定义以后,在派⽣类中可以对其⽅法进⾏调⽤,⽽且可以通过重写来改变其中实现的功能来实现⾃⼰的⼀些功能,⽽不是虚⽅法时,必须重新声明⽅法然后再进⾏⾃⼰想要的功能进
⾏编写然后再进⾏调⽤,但是虚⽅法只需要在派⽣类中对其进⾏调⽤,如果想实现其他的功能可以对其进⾏⽅法等的重写,进⽽实现⾃⼰想要的功能,调⽤基类的虚⽅法来执⾏派⽣类的具体操作。⽽在基类调⽤时,并不需要知道派⽣类是怎么样实现的。因为不同的派⽣类可能实现的⽅式不⼀样。但调⽤的⽅式是⼀样的,实现了不同的功能
七.虚⽅法的作⽤:
1.允许 ⼦类 / 派⽣类 进⾏重写;
2.增加代码的可维护性,脉络较清淅有条理; class DD : Person { public override void XXX () { base .XXX (); Console .WriteLine ("我是第⼀个继承虚⽅法的"); } } class SS : Person { public override void XXX () { base .XXX (); Console .WriteLine ("我是第⼆个继承虚⽅法的"); }
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论