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
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