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 

转载于:https://www.cnblogs.com/Rayleigh/archive/2009/03/01/1400897.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值