• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    公众号

C#有关虚方法要知道的知识点:

原作者: [db:作者] 来自: [db:来源] 收藏 邀请

虚方法:这个方法其实就是为了重写方法而存在的(在声明中包含virtual关键字),否则没感觉到它存在的意义。

其一:因为要重写所以它的访问类型如果为private则毫无意义阻碍了重写动作的进行也就是它不能私有化,所以C#中virtual关键字和private关键字不能同时使用。

其二:因为静态的方法和抽象方法不能重写,同理C#中static,abstract关键字和virtual关键字不能同时使用。

其三:不能在声明虚方法的同时指定重写虚方法,因为重写方法只能重写基类的虚方法,也就是要提前在基类中声明虚方法,所以virtual关键字和override关键字不能同时使用。

重写方法:就是使从基类继承的虚方法提供新的实现(使用关键字override声明),从而为其子类所专有化。

同上面的思路一样:因为静态的方法和抽象方法不能重写,同理C#中static,abstract,new关键字和override关键字不能同时使用。

总结用法如下:

非虚方法的实现(全部隐藏的虚方法)最初声明的是什么类的方法就永远是什么类的方法。

虚方法的实现:最终是什么类型的方法就调用该类型的方法。

(含有隐藏的)虚方法的实现:最终是什么类型的方法就调用(最靠近)该类型的方法。

注:在派生类中重写基类中的虚方法时,可以使用base关键字调用基类中的虚方法。

相关理解程序如下:

 1 namespace ClassAB
 2 {
 3     /*
 4      
 5       public class A
 6     {
 7         public virtual void Fun1(int i)
 8         {
 9             Console.WriteLine(i);
10         }
11         public void Fun2(A a)
12         {
13             a.Fun1(1);
14             Fun1(5);
15         }
16     }
17     class Program:A
18     {
19         public override void Fun1(int i)
20         {
21             base.Fun1(i+1);
22         }
23         static void Main(string[] args)
24         {
25             Program b = new Program();
26             A a = new A();
27             a.Fun2(b);          //2   5
28             b.Fun2(a);          //1   6
29             Console.ReadLine();
30         }
31     }
32      */
33     /*
34      public abstract class A
35     {
36         public A()
37         {
38             Console.WriteLine('A');
39         }
40         public virtual void Fun()
41         {
42             Console.WriteLine("A.Fun()");
43         }
44     }
45 
46     class Program :A
47     {
48         public Program()
49         {
50             Console.WriteLine('B');
51         }
52         public new void Fun()
53         {
54             Console.WriteLine("B.Fun()");
55         }
56         static void Main(string[] args)
57         {
58             A a = new Program();
59             a.Fun();        // A  B  A.Fun()
60             Console.ReadLine();
61         }
62     }
63      */
64 
65     class BaseClass
66     {
67         public virtual int Add(int x,int y)
68         {
69             return x+y;
70         }
71     }
72     class Program:BaseClass
73     {
74         static int z = 100;
75         public override int Add(int x, int y)
76         {
77             return base.Add(x,y)+z; //300
78             // return x * y; 50
79         }
80          static void Main(string[] args)
81         {
82             BaseClass baseclass = new Program();
83             Console.WriteLine(baseclass.Add(10,5));
84             Console.ReadLine();
85         }      
86     }

 


鲜花

握手

雷人

路过

鸡蛋
该文章已有0人参与评论

请发表评论

全部评论

专题导读
上一篇:
C#中Dictionary的用法及用途发布时间:2022-07-10
下一篇:
C# 发送邮件附件发布时间:2022-07-10
热门推荐
阅读排行榜

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap