c# override,new关键字区别与使用(学习笔记)
时间:2010-12-03 来源:小聪崽的一切
先看段代码:
1
using System;
2
using System.Collections.Generic;
3
using System.Text;
4
5
namespace 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
using System;2
using System.Collections.Generic;3
using System.Text;4

5
namespace ConsoleApplication16

{7
class Program8
{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 baseClass31
{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 : baseClass44
{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 : baseClass57
{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隐藏基类的方法,那么基类的方法和当前类的方法同时存在只是被隐藏了;
真想弄些实际应用的例子,想好了补上.
相关阅读 更多 +











