由子未

向上人生路

导航

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 

posted on 2009-03-01 16:55  Rayleigh  阅读(395)  评论(0编辑  收藏  举报