virtual虛方法

1 using System;
  2 using System.Collections.Generic;
  3 using System.Text;
  4 //多態------------
  5 namespace virtuaL//虛方法
  6 {
  7     class a
  8     {
  9         public virtual void aA()
 10         {
 11             Console.WriteLine("a.aA");
 12         }
 13     }
 14     class b:a
 15     {
 16         public override void aA()
 17         {
 18             Console.WriteLine("b.aA");
 19         }
 20     }
 21     class c : a
 22     {
 23         public new void aA()
 24         {
 25             Console.WriteLine("c.aA");
 26         }
 27     }
 28     class d : b
 29     {
 30         public override void aA()
 31         {
 32             Console.WriteLine("d.aA");
 33         }
 34     }
 35     class program
 36     {
 37         static void Main()
 38         {
 39             b newB = new b();
 40             newB.aA();
 41             a newA = new b();//b類繼承於a類,b類裏包含了a類的成員,這裏是實例化b類裏的a類成員
 42             //只有通過聲明瞭override的方法類才能替換virtual基類的方法
 43             newA.aA();
 44             a newC = new a();//這裏沒有通過b類(包含override的方法類)訪問a類,不實現virtral方法
 45             newC.aA();
 46 
 47             a newcA = new c();
 48             newcA.aA();
 49             c newcB = new c();
 50             newcB.aA();
 51 
 52             a nA = new d();
 53             nA.aA();
 54             b nB = new d();
 55             nB.aA();
 56 
 57         }
 58     }
 59     //class program
 60     //{
 61     //    static void Main()
 62     //    {
 63     //        gongshI[] gonG = new gongshI[3];//聲明類數組
 64     //        gonG[0] = new jinlI("經理");//用基類聲明一個繼承類 //沒有事先聲明jinlI類的實例,因而這是要用new聲明
 65     //        gonG[1] = new zhuguaN("主管");
 66     //        gonG[2] = new zhuzanG("組長");
 67     //        foreach(gongshI p in gonG)
 68     //        {
 69     //            p.startworK();//應用了多態,這時執行用於替代基類的方法
 70     //        }
 71     //    }
 72     //}
 73     //class gongshI
 74     //{
 75     //    protected string namE;//聲明一個繼承類可以訪問的成員
 76     //    internal gongshI() { }//構造器,編譯器規定要有的,在這裏不起實質作用
 77     //    internal gongshI(string nameA)//爲namE賦值
 78     //    {
 79     //        this.namE = nameA;
 80     //    }
 81     //    internal virtual void startworK()//多態
 82     //    {
 83     //        Console.WriteLine(namE + "開始工作---");
 84     //    }
 85     //}
 86     //class jinlI : gongshI
 87     //{
 88     //    internal jinlI(string nameA) : base(nameA) { }//base:訪問基類各種成員類型, //構造器 //base會訪問基類成員,因爲執行了基類構造器,base(name)表示基類構造器internal gongshI(string nameA)
 89     //    internal override void startworK()//多態
 90     //    {
 91     //        base.startworK();//在繼承類調用基類的方法  //先執行基類的方法,在執行本類方法
 92     //        Console.WriteLine("安排主管工作");
 93     //    }
 94     //}
 95     //class zhuguaN : gongshI
 96     //{
 97     //    internal zhuguaN(string nameA) : base(nameA) { }
 98     //    internal override void startworK()//多態
 99     //    {
100     //        base.startworK();
101     //        Console.WriteLine("安排組長工作");
102     //    }
103     //}
104     //class zhuzanG : gongshI
105     //{
106     //    internal zhuzanG(string nameA) : base(nameA) { }
107     //    internal override void startworK()//多態
108     //    {
109     //        base.startworK();
110     //        Console.WriteLine("安排員工生產");
111     //    }
112     //}
113 
114  
115 
116     //多層繼承多個虛方法
117     //class Program
118     //{
119     //    static void Main(string[] args)
120     //    {
121     //        C cA = new C();
122     //        A aA = cA;//替代A aA = new C();
123     //        B bA = cA;
124     //        cA.consolE();
125     //        bA.consolE();
126     //        aA.consolE();
127 
128     //        cA.consoleA();
129     //        bA.consoleA();
130     //        aA.consoleA();
131     //    }
132     //}
133     //class A
134     //{
135     //    internal virtual void consolE()//用virtral聲明一個虛方法,一般和override一起使用
136     //    {
137     //        Console.WriteLine("this is a class A");
138     //    }
139     //    internal virtual void consoleA()
140     //    {
141     //        Console.WriteLine("this is a class A2");
142     //    }
143     //}
144     //class B : A
145     //{
146     //    internal override void consoleA()//override把父類聲明的虛方法改寫成自己聲明的方法.!:執行時override聲明的方法會到父類裏找名稱和它相同的virtual聲明的虛方法,因而
147     //    {
148     //        Console.WriteLine("this is a class B:A");
149     //    }
150     //    internal override void consolE()
151     //    {
152     //        Console.WriteLine("this is a class B:A2");
153     //    }
154     //}
155     //class C : B
156     //{
157     //    internal override void consolE()
158     //    {
159     //        Console.WriteLine("this is a class C:B");
160     //    }
161     //    internal override void consoleA()
162     //    {
163     //        Console.WriteLine("this is a class C:B2");
164     //    }
165     //}
166 
167 
168     //class program
169     //{
170     //    static void Main()
171     //    {
172     //        zhileiA zhiA = new zhileiA();
173     //        zhileiB zhiB = new zhileiB();
174 
175     //        fuleI fuzhiA = zhiA;
176     //        fuleI fuzhiB = zhiB;
177 
178     //        zhiA.voiD();
179     //        fuzhiA.voiD();
180 
181     //        zhiB.voiD();
182     //        fuzhiB.voiD();
183     //    }
184     //}
185     //class fuleI
186     //{
187     //    internal virtual void voiD()
188     //    {
189     //        Console.WriteLine("父類");
190     //    }
191     //}
192     //class zhileiA : fuleI
193     //{
194     //    internal override void voiD()
195     //    {
196     //        Console.WriteLine("子類A");
197     //    }
198     //}
199     //class zhileiB : fuleI
200     //{
201     //    internal override void voiD()
202     //    {
203     //        Console.WriteLine("子類B");
204     //    }
205     //}
206 
207 
208 }
209 
210 
211 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章