C#有關虛方法要知道的知識點:


虛方法:這個方法其實就是為了重寫方法而存在的(在聲明中包含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     }

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM