1
using
System;
2
using
System.Collections.Generic;
3
using
System.Text;
4
5
namespace
CSharpFoundationStudy
6
{
7
/**//*
8
* abstract virtual new override 关键字
9
* abstract 修饰符可以用于类、方法、属性、事件和索引器,表示其为抽象成员
10
* abstract 不可以和 static 、virtual 一起使用
11
* 声明为 abstract 成员可以不包括实现代码,但只要类中还有未实现的抽象成员(即抽象类),那么它的对象就不能被实例化,通常用于强制继承类必须实现某一成员
12
*
13
* 如果父类方法没有加virtual关键字,即不是一个虚方法,则在子类中只能隐藏基类方法,而不能覆盖。
14
* 如果父类方法加了virtual关键字,即它是一个虚方法,在子类中一样可以隐藏。
15
* 如果子类实现了父类相同的方法(相同的方法名称及签名),而没有new,在编译时会报警,但编译仍然能够通过!
16
* 调用父类方法:base.方法名()
17
* abstract类是一个抽象类,不能被实例化
18
*/
19
20
抽象基类#region 抽象基类
21
public abstract class BaseAbstract
22
{
23
public abstract string Attribute
24
{
25
set;
26
get;
27
}
28
29
public void GFunction(string value)
30
{
31
Console.WriteLine("General Function in Abstract Base Class:" + value);
32
}
33
34
public virtual void VFunction(string value)
35
{
36
Console.WriteLine("Virtual Function in Abstract Base Class:" + value);
37
}
38
39
public abstract void AFunction(string value);
40
41
public abstract event EventHandler Event;
42
43
public abstract char this[int index]
44
{
45
get;
46
}
47
}
48
#endregion
49
50
继承类#region 继承类
51
public class DerivedInstance : BaseAbstract
52
{
53
private string attribute;
54
55
public override string Attribute
56
{
57
get
58
{
59
return attribute;
60
}
61
set
62
{
63
attribute = value;
64
}
65
}
66
67
//Error: CSharpFoundationStudy.BaseAbstract.GFunction(string) 未被标记为virtual abstract 无法进行重写
68
//public override void GFunction(string value){ }
69
70
//Warning: 隐藏了继承的成员 如果是有意隐藏,请使用关键字 new
71
//public void GFunction(string value) { }
72
73
public new void GFunction(string value)
74
{
75
base.GFunction(value);
76
Console.WriteLine("General Function in Base Class is Hidden with keyword new:" + value);
77
}
78
79
public override void VFunction(string value)
80
{
81
base.VFunction(value);
82
Console.WriteLine("Virtual Function Override in Derived Class:" + value);
83
}
84
85
public override void AFunction(string value)
86
{
87
Console.WriteLine("Abstract Function Override in Derived Class:" + value);
88
attribute = value;
89
//调用委托
90
if (Event != null)
91
{
92
Event(this, new EventArgs());
93
}
94
}
95
96
public override char this[int index]
97
{
98
/**//*
99
* String类
100
* String.Chars 属性
101
* 获取此实例中位于指定字符位置的字符
102
* public char this [int index] { get; }
103
*/
104
get
{ return attribute[index]; }
105
}
106
107
/**//*
108
* EventHandle is delegate 委托
109
* 委托是一个定义签名的类型,即方法的返回值类型和参数列表类型。
110
* 可以使用委托类型来声明一个变量,该变量可以引用与委托签名相同的所有方法。
111
* 事件处理程序委托的标准签名定义一个没有返回值的方法
112
* 其第一个参数的类型为 Object,它引用引发事件的实例
113
* 第二个参数从 EventArgs 类型派生,它保存事件数据。如果事件不生成事件数据,则第二个参数只是 EventArgs 的一个实例。否则,第二个参数为从 EventArgs 派生的自定义类型,提供保存事件数据所需的全部字段或属性
114
*/
115
public override event EventHandler Event;
116
}
117
#endregion
118
119
public class Test
120
{
121
public static void OnFunction(object sender, EventArgs e)
122
{
123
/**//*
124
* From: http://www.cnblogs.com/anytao/ [你必须知道的.NET] 第一回:恩怨情仇:is和as
125
* as VS is 类型安全
126
* 类型转换包括显示转换和隐式转换,在.NET中类型转换的基本规则如下:
127
* 任何类型都可以安全的转换为其基类类型,可以由隐式转换来完成;
128
* 任何类型转换为其派生类型时,必须进行显示转换,转换的规则是:(类型名)对象名;
129
* 使用GetType可以取得任何对象的精确类型;
130
* 基本类型可以使用Covert类实现类型转换;
131
* 除了string以外的其他类型都有Parse方法,用于将字符串类型转换为对应的基本类型;
132
* 值类型和引用类型的转换机制称为装箱(boxing)和拆箱(unboxing)。
133
*
134
* is/as操作符,是C#中用于类型转换的,提供了对类型兼容性的判断,从而使得类型转换控制在安全的范畴,提供了灵活的类型转换控制
135
* is的规则如下:
136
* 检查对象类型的兼容性,并返回结果,true或者false;
137
* 不会抛出异常;
138
* 如果对象为null,则返回值永远为false。
139
*
140
* as的规则如下:
141
* 检查对象类型的兼容性,并返回结果,如果不兼容就返回null;
142
* 不会抛出异常;
143
* 如果结果判断为空,则强制执行类型转换将抛出NullReferenceException异常。
144
*/
145
DerivedInstance instance = sender as DerivedInstance;
146
if (instance != null)
147
{
148
for (int i = 0; i < instance.Attribute.Length; i++)
149
{
150
Console.WriteLine(instance[i]);
151
}
152
}
153
}
154
public static void Main()
155
{
156
DerivedInstance instance = new DerivedInstance();
157
instance.Event += new EventHandler(OnFunction);
158
instance.GFunction("simply-zhao 2008/1/20");
159
instance.VFunction("simply-zhao 2008/1/20");
160
instance.AFunction("simply-zhao 2008/1/20");
161
Console.ReadLine();
162
}
163
}
164
}
165

2

3

4

5

6



7


8

9

10

11

12

13

14

15

16

17

18

19

20


21

22



23

24



25

26

27

28

29

30



31

32

33

34

35



36

37

38

39

40

41

42

43

44



45

46

47

48

49

50


51

52



53

54

55

56



57

58



59

60

61

62



63

64

65

66

67

68

69

70

71

72

73

74



75

76

77

78

79

80



81

82

83

84

85

86



87

88

89

90

91



92

93

94

95

96

97



98


99

100

101

102

103

104



105

106

107


108

109

110

111

112

113

114

115

116

117

118

119

120



121

122



123


124

125

126

127

128

129

130

131

132

133

134

135

136

137

138

139

140

141

142

143

144

145

146

147



148

149



150

151

152

153

154

155



156

157

158

159

160

161

162

163

164

165
