今天看到一个朋友
在override,new上的问题搞错,呵呵我想很多刚入门的朋友也一样吧
我呢就查查资料顺便巩固一下自己的理解,现在整理出学习笔记.
先看段代码:
1using System;
2using System.Collections.Generic;
3using System.Text;
4
5namespace ConsoleApplication1
6{
7 class Program
8 {
9
10 static void Main(string[] args)
11 {
12 baseClass bc;
13 class1 ct1 = new class1();
14
15 class2 ct2 = new class2();
16
17 ct1.prinf();
18 bc = ct1;
19 bc.prinf();
20
21 Console.WriteLine("---------------------");
22
23 ct2.prinf();
24 bc = ct2;
25 bc.prinf();
26
27 }
28 }
29
30 public class baseClass
31 {
32 private int index = 0;
33
34 public virtual void prinf()
35 {
36
37 Console.WriteLine("这是基类虚方法" + index.ToString());
38
39 }
40
41 }
42
43 public class class1 : baseClass
44 {
45 private int index = 1;
46
47 public override void prinf()
48 {
49
50 Console.WriteLine("这是子类新的方法" + index.ToString());
51
52 }
53
54 }
55
56 public class class2 : baseClass
57 {
58 private int index = 2;
59
60 public new void prinf()
61 {
62
63 Console.WriteLine("这是子类新的方法" + index.ToString());
64
65 }
66
67 }
68
69
70}
71
2using System.Collections.Generic;
3using System.Text;
4
5namespace ConsoleApplication1
6{
7 class Program
8 {
9
10 static void Main(string[] args)
11 {
12 baseClass bc;
13 class1 ct1 = new class1();
14
15 class2 ct2 = new class2();
16
17 ct1.prinf();
18 bc = ct1;
19 bc.prinf();
20
21 Console.WriteLine("---------------------");
22
23 ct2.prinf();
24 bc = ct2;
25 bc.prinf();
26
27 }
28 }
29
30 public class baseClass
31 {
32 private int index = 0;
33
34 public virtual void prinf()
35 {
36
37 Console.WriteLine("这是基类虚方法" + index.ToString());
38
39 }
40
41 }
42
43 public class class1 : baseClass
44 {
45 private int index = 1;
46
47 public override void prinf()
48 {
49
50 Console.WriteLine("这是子类新的方法" + index.ToString());
51
52 }
53
54 }
55
56 public class class2 : baseClass
57 {
58 private int index = 2;
59
60 public new void prinf()
61 {
62
63 Console.WriteLine("这是子类新的方法" + index.ToString());
64
65 }
66
67 }
68
69
70}
71
运行结果:
这是子类新的方法1
这是子类新的方法1
---------------------
这是子类新的方法2
这是基类虚方法0
如上
使用override重写printf方法,通过父类引用一样只能看到重写后的方法;
如果使用new隐藏printf方法,父类子类引用各自对应方法;
override重写虚方法,那么就只剩下重写以后的方法;
new隐藏基类的方法,那么基类的方法和当前类的方法同时存在只是被隐藏了;
真想弄些实际应用的例子,想好了补上.
本文转自黄聪博客园博客,原文链接:http://www.cnblogs.com/huangcong/archive/2010/12/03/1895408.html,如需转载请自行联系原作者