1.静态成员和非静态成员的区别?
2.const 和 static readonly 区别?
3.extern 是什么意思?
4.abstract 是什么意思?
5.internal 修饰符起什么作用?
6.sealed 修饰符是干什么的?
7.override 和 overload 的区别?
8.什么是索引指示器?
9.new 修饰符是起什么作用?
10.this 关键字的含义?
11.可以使用抽象函数重写基类中的虚函数吗?
12.密封类可以有虚函数吗?
13.什么是属性访问器?
14.abstract 可以和 virtual 一起使用吗?可以和 override 一起使用吗?
15.接口可以包含哪些成员?
16.类和结构的区别?
17.接口的多继承会带来哪些问题?
18.抽象类和接口的区别?
19.别名指示符是什么?
20.如何手工释放资源?
21.P/Invoke是什么?
22.StringBuilder 和 String 的区别?
23.explicit 和 implicit 的含义?
24.params 有什么用?
25.什么是反射?
2.const 和 static readonly 区别?
3.extern 是什么意思?
4.abstract 是什么意思?
5.internal 修饰符起什么作用?
6.sealed 修饰符是干什么的?
7.override 和 overload 的区别?
8.什么是索引指示器?
9.new 修饰符是起什么作用?
10.this 关键字的含义?
11.可以使用抽象函数重写基类中的虚函数吗?
12.密封类可以有虚函数吗?
13.什么是属性访问器?
14.abstract 可以和 virtual 一起使用吗?可以和 override 一起使用吗?
15.接口可以包含哪些成员?
16.类和结构的区别?
17.接口的多继承会带来哪些问题?
18.抽象类和接口的区别?
19.别名指示符是什么?
20.如何手工释放资源?
21.P/Invoke是什么?
22.StringBuilder 和 String 的区别?
23.explicit 和 implicit 的含义?
24.params 有什么用?
25.什么是反射?
1.静态变量和非静态变量的区别?
静态变量:静态变量使用 static 修饰符进行声明 ,在所属类被装载时创建,通过类进行访问,所属类的
所有实例的同一静态变量都是同一个值。
非静态变量:不带有static 修饰符声明的变量称做非静态变量,在类被实例化时创建,通过对象进行访
问,同一个类的不同实例的同一非静态变量可以是不同的值。
2.const 和 static readonly 区别?
const:用const 修饰符声明的成员叫常量,是在编译期初始化并嵌入到客户端程序。
static readonly:用static readonly 修饰符声明的成员依然是变量,只不过具有和常量类似的
使用方法:通过类进行访问、初始化后不可以修改。但与常量不同的是这种变量是在运行期初始化。
3.extern 是什么意思?
extern:修饰符用于声明由程序集外部实现的成员函数,经常用于系统API函数的调用。
注意:和DllImport一起使用时要加上static修饰符,也可以用于对于同一程序集不同版本组件的
调用(用extern声明别名),不能与abstract修饰符同时使用。
4.abstract 是什么意思?
abstract修饰符可以用于类、方法、属性、事件和索引指示器(indexer),表示其为抽象成员。
abstract不可以和 static 、virtual 、override 一起使用。
声明为abstract成员可以不包括实现代码,但只有类中还有未实现的抽象成员,该类就不可以被实例化,
通常用于强制继承类必须实现某一成员。
5.internal 修饰符起什么作用?
internal 修饰符可以用于类型或成员,使用该修饰符声明的类型或成员只能在同一程集内访问,
接口的成员不能使用 internal 修饰符
6.sealed 修饰符是干什么的?
sealed修饰符表示密封,用于类时,表示该类不能再被继承,不能和abstract同时使用,
因为这两个修饰符在含义上互相排斥,用于方法和属性时,表示该方法或属性不能再被继承,
必须和override关键字一起使用,因为使用sealed修饰符的方法或属性肯定是基类中相应的虚成员,
通常用于实现第三方类库时不想被客户端继承,或用于没有必要再继承的类以防止滥用继承造成
层次结构体系混乱。恰当的利用sealed修饰符也可以提高一定的运行效率。
7.override 和 overload 的区别?
override 表示重写,用于继承类对基类中虚成员的实现。
overload 表示重载,用于同一个类中同名方法不同参数(包括类型不同或个数不同)的实现。
8.什么是索引指示器?
实现索引指示器(indexer)的类可以象数组那样使用其实例后的对象,但与数组不同的是索引指示器的
参数类型不仅限于int,简单来说,其本质就是一个含参数属性。
9.new 修饰符是起什么作用?
new 修饰符与 new 操作符是两个概念。
new 修饰符用于声明类或类的成员,表示隐藏了基类中同名的成员。而new 操作符用于实例化一个类型。
new 修饰符只能用于继承类,一般用于弥补基类设计的不足。
new 修饰符和override修饰符不可同时用在一个成员上,因为这两个修饰符在含义上互相排斥。
10.this 关键字的含义?
this是一个保留字,仅限于构造函数和方法成员中使用。
在类的构造函数中出现表示对正在构造的对象本身的引用,
在类的方法中出现表示对调用该方法的对象的引用。
在结构的构造上函数中出现表示对正在构造的结构的引用,
在结构的方法中出现表示对调用该方法的结果的引用。
this保留字不能用于静态成员的实现里,因为这时对象或结构并未实例化。
在C#系统中,this 实际上是一个常量,所以不能使用this++这样的运算。
this保留字一般用于限定同名的隐藏成员、将对象本身做为参数、声明索引访问器、判断传入参数的对象是否为本身。
11.可以使用抽象函数重写基类中的虚函数吗?
可以,但需使用new修饰符显式声明,表示隐藏了基类中该函数的实现。还可以用override.
12.密封类可以有虚函数吗?
可以,基类中的虚函数将隐式的转化为非虚函数,但密封类本身不能再增加新的虚函数。
13.如果基类中的虚属性只有一个属性访问器,那么继承类重写该属性后可以有几个属性访问器?如果基类中有get和set两个呢?
如果基类中的虚属性只有一个属性访问器,那么继承类重写该属性后也应只有一个。
如果基类中有get和set两个属性访问器,那么继承类中可以只有一个也可以同时有两个属性访问器。
14.abstract 可以和 virtual 一起使用吗?可以和 override 一起使用吗?
abstract 修饰符不可以和 static、virtual 但可以和 override 修饰符一起使用。
15.接口可以包含哪些成员?
接口可以包含属性、方法、索引指示器和事件,但不能包含常量、域、操作符、构造函数和析构函数,而且也不能包含任何静态成员。
16.类和结构的区别?
类:类是引用类型在堆上分配,类的实例进行赋值只是复制了引用,都指向同一段实际对象分配的内存,
类有构造和析构函数,类可以继承和被继承。
结构:结构是值类型在栈上分配(虽然栈的访问速度比较堆要快,但栈的资源有限放),
结构的赋值将分配产生一个新的对象。结构没有构造函数,但可以添加。结构没有析构函数,
结构不可以继承自另一个结构或被继承,但和类一样可以继承自接口。
17.接口的多继承会带来哪些问题?
C# 中的接口与类不同,可以使用多继承,即一个子接口可以有多个父接口。
但如果两个父成员具有同名的成员,就产生了二义性(这也正是C#中类取消了多继承的原因之一),这时在实现时最好使用显式的声明。
18.抽象类和接口的区别?
抽象类(abstract class)可以包含功能定义和实现,
接口(interface)只能包含功能定义,抽象类是从一系列相关对象中抽象出来的概念,因此反映的是事物的
内部共性,接口是为了满足外部调用而定义的一个功能约定, 因此反映的是事物的外部特性,分析对象,
提炼内部共性形成抽象类,用以表示对象本质,即“是什么”,为外部提供调用或功能需要扩充时优先使用接口。
19.别名指示符是什么?
通过别名指示符我们可以为某个类型起一个别名,主要用于解决两个命名空间内有同名类型的冲突或
避免使用冗余的命名空间,别名指示符只在一个单元文件内起作用。
20.如何释放非托管资源?
.NET平台在内存管理方面提供了GC(Garbage Collection),负责自动释放托管资源和内存回收的
工作,但它无法对非托管资源进行释放,这时我们必须自己提供方法来释放对象内分配的非托管资源,
比如你在对象的实现代码中使用了一个COM对象,最简单的办法,可以通过实现
protected void Finalize()(析构函数会在编译时变成这个东东)来释放非托管资源,
因为GC在释放对象时会检查该对象是否实现了 Finalize() 方法,如果是则调用它。
有一种更好的,那就是通过实现一个接口显式的提供给客户调用端手工释放对象的方法,
而不是傻傻的等着GC来释放我们的对象(何况效率又那么低),
System命名空间内有一个IDisposable接口,拿来做这事非常合适,就省得我们自己再声明一个接口了。
另外补充一句,这种实现并不一定要使用了非托管资源后才用,如果你设计的类会在运行时有大些的
实例(象GIS中的Geometry),为了优化程序性能,你也可以通过实现该接口让客户调用端在确认
不需要这些对象时手工释放它们。
21.P/Invoke是什么?
在受控代码与非受控代码进行交互时会产生一个事务(transition),
这通常发生在使用平台调用服务(Platform Invocation Services),即P/Invoke,
如调用系统的API或与COM对象打交道,通过System.Runtime.InteropServices命名空间,
虽然使用Interop非常方便,但据估计每次调用事务都要执行10到40条指令,算起来开销也不少,
所以我们要尽量少调用事务,如果非用不可,建议本着一次调用执行多个动作,
而不是多次调用每次只执行少量动作的原则。
22.StringBuilder 和 String 的区别?
String虽然是一个引用类型,但在赋值操作时会产生一个新的对象,而StringBuilder则不会,
所以在大量字符串拼接或频繁对某一字符串进行操作时最好使用StringBuilder,不要使用String。
23.explicit 和 implicit 的含义?
explicit和implicit属于转换运算符,如用这两者可以让我们自定义的类型支持相互交换,
explicti表示显式转换,如从A->B必须进行强制类型转换(B=(B)A),
implicit表示隐式转换,如从B->A只需直接赋值(A=B),
隐式转换可以让我们的代码看上去更漂亮、更简洁易懂,所以最好多使用 implicit 运算符。
不过!如果对象本身在转换时会损失一些信息(如精度),那么我们只能使用 explicit 运算符,以便在编译期就能警告客户调用端。
24.params 有什么用?
params关键字在方法成员的参数列表中使用,为该方法提供了参数个数可变的能力,
它在只能出现一次并且不能在其后再有参数定义,之前可以。
25.什么是反射
反射,Reflection,通过它我们可以在运行时获得各种信息,
如程序集、模块、类型、字段、属性、方法和事件,
通过对类型动态实例化后,还可以对其执行操作,一般用于插件式框架程序和设计模式的实现,
当然反射是一种手段可以充分发挥其能量来完成你想做的任何事情。
静态变量:静态变量使用 static 修饰符进行声明 ,在所属类被装载时创建,通过类进行访问,所属类的
所有实例的同一静态变量都是同一个值。
非静态变量:不带有static 修饰符声明的变量称做非静态变量,在类被实例化时创建,通过对象进行访
问,同一个类的不同实例的同一非静态变量可以是不同的值。
2.const 和 static readonly 区别?
const:用const 修饰符声明的成员叫常量,是在编译期初始化并嵌入到客户端程序。
static readonly:用static readonly 修饰符声明的成员依然是变量,只不过具有和常量类似的
使用方法:通过类进行访问、初始化后不可以修改。但与常量不同的是这种变量是在运行期初始化。
3.extern 是什么意思?
extern:修饰符用于声明由程序集外部实现的成员函数,经常用于系统API函数的调用。
注意:和DllImport一起使用时要加上static修饰符,也可以用于对于同一程序集不同版本组件的
调用(用extern声明别名),不能与abstract修饰符同时使用。
4.abstract 是什么意思?
abstract修饰符可以用于类、方法、属性、事件和索引指示器(indexer),表示其为抽象成员。
abstract不可以和 static 、virtual 、override 一起使用。
声明为abstract成员可以不包括实现代码,但只有类中还有未实现的抽象成员,该类就不可以被实例化,
通常用于强制继承类必须实现某一成员。
5.internal 修饰符起什么作用?
internal 修饰符可以用于类型或成员,使用该修饰符声明的类型或成员只能在同一程集内访问,
接口的成员不能使用 internal 修饰符
6.sealed 修饰符是干什么的?
sealed修饰符表示密封,用于类时,表示该类不能再被继承,不能和abstract同时使用,
因为这两个修饰符在含义上互相排斥,用于方法和属性时,表示该方法或属性不能再被继承,
必须和override关键字一起使用,因为使用sealed修饰符的方法或属性肯定是基类中相应的虚成员,
通常用于实现第三方类库时不想被客户端继承,或用于没有必要再继承的类以防止滥用继承造成
层次结构体系混乱。恰当的利用sealed修饰符也可以提高一定的运行效率。
7.override 和 overload 的区别?
override 表示重写,用于继承类对基类中虚成员的实现。
overload 表示重载,用于同一个类中同名方法不同参数(包括类型不同或个数不同)的实现。
8.什么是索引指示器?
实现索引指示器(indexer)的类可以象数组那样使用其实例后的对象,但与数组不同的是索引指示器的
参数类型不仅限于int,简单来说,其本质就是一个含参数属性。
9.new 修饰符是起什么作用?
new 修饰符与 new 操作符是两个概念。
new 修饰符用于声明类或类的成员,表示隐藏了基类中同名的成员。而new 操作符用于实例化一个类型。
new 修饰符只能用于继承类,一般用于弥补基类设计的不足。
new 修饰符和override修饰符不可同时用在一个成员上,因为这两个修饰符在含义上互相排斥。
10.this 关键字的含义?
this是一个保留字,仅限于构造函数和方法成员中使用。
在类的构造函数中出现表示对正在构造的对象本身的引用,
在类的方法中出现表示对调用该方法的对象的引用。
在结构的构造上函数中出现表示对正在构造的结构的引用,
在结构的方法中出现表示对调用该方法的结果的引用。
this保留字不能用于静态成员的实现里,因为这时对象或结构并未实例化。
在C#系统中,this 实际上是一个常量,所以不能使用this++这样的运算。
this保留字一般用于限定同名的隐藏成员、将对象本身做为参数、声明索引访问器、判断传入参数的对象是否为本身。
11.可以使用抽象函数重写基类中的虚函数吗?
可以,但需使用new修饰符显式声明,表示隐藏了基类中该函数的实现。还可以用override.
12.密封类可以有虚函数吗?
可以,基类中的虚函数将隐式的转化为非虚函数,但密封类本身不能再增加新的虚函数。
13.如果基类中的虚属性只有一个属性访问器,那么继承类重写该属性后可以有几个属性访问器?如果基类中有get和set两个呢?
如果基类中的虚属性只有一个属性访问器,那么继承类重写该属性后也应只有一个。
如果基类中有get和set两个属性访问器,那么继承类中可以只有一个也可以同时有两个属性访问器。
14.abstract 可以和 virtual 一起使用吗?可以和 override 一起使用吗?
abstract 修饰符不可以和 static、virtual 但可以和 override 修饰符一起使用。
15.接口可以包含哪些成员?
接口可以包含属性、方法、索引指示器和事件,但不能包含常量、域、操作符、构造函数和析构函数,而且也不能包含任何静态成员。
16.类和结构的区别?
类:类是引用类型在堆上分配,类的实例进行赋值只是复制了引用,都指向同一段实际对象分配的内存,
类有构造和析构函数,类可以继承和被继承。
结构:结构是值类型在栈上分配(虽然栈的访问速度比较堆要快,但栈的资源有限放),
结构的赋值将分配产生一个新的对象。结构没有构造函数,但可以添加。结构没有析构函数,
结构不可以继承自另一个结构或被继承,但和类一样可以继承自接口。
17.接口的多继承会带来哪些问题?
C# 中的接口与类不同,可以使用多继承,即一个子接口可以有多个父接口。
但如果两个父成员具有同名的成员,就产生了二义性(这也正是C#中类取消了多继承的原因之一),这时在实现时最好使用显式的声明。
18.抽象类和接口的区别?
抽象类(abstract class)可以包含功能定义和实现,
接口(interface)只能包含功能定义,抽象类是从一系列相关对象中抽象出来的概念,因此反映的是事物的
内部共性,接口是为了满足外部调用而定义的一个功能约定, 因此反映的是事物的外部特性,分析对象,
提炼内部共性形成抽象类,用以表示对象本质,即“是什么”,为外部提供调用或功能需要扩充时优先使用接口。
19.别名指示符是什么?
通过别名指示符我们可以为某个类型起一个别名,主要用于解决两个命名空间内有同名类型的冲突或
避免使用冗余的命名空间,别名指示符只在一个单元文件内起作用。
20.如何释放非托管资源?
.NET平台在内存管理方面提供了GC(Garbage Collection),负责自动释放托管资源和内存回收的
工作,但它无法对非托管资源进行释放,这时我们必须自己提供方法来释放对象内分配的非托管资源,
比如你在对象的实现代码中使用了一个COM对象,最简单的办法,可以通过实现
protected void Finalize()(析构函数会在编译时变成这个东东)来释放非托管资源,
因为GC在释放对象时会检查该对象是否实现了 Finalize() 方法,如果是则调用它。
有一种更好的,那就是通过实现一个接口显式的提供给客户调用端手工释放对象的方法,
而不是傻傻的等着GC来释放我们的对象(何况效率又那么低),
System命名空间内有一个IDisposable接口,拿来做这事非常合适,就省得我们自己再声明一个接口了。
另外补充一句,这种实现并不一定要使用了非托管资源后才用,如果你设计的类会在运行时有大些的
实例(象GIS中的Geometry),为了优化程序性能,你也可以通过实现该接口让客户调用端在确认
不需要这些对象时手工释放它们。
21.P/Invoke是什么?
在受控代码与非受控代码进行交互时会产生一个事务(transition),
这通常发生在使用平台调用服务(Platform Invocation Services),即P/Invoke,
如调用系统的API或与COM对象打交道,通过System.Runtime.InteropServices命名空间,
虽然使用Interop非常方便,但据估计每次调用事务都要执行10到40条指令,算起来开销也不少,
所以我们要尽量少调用事务,如果非用不可,建议本着一次调用执行多个动作,
而不是多次调用每次只执行少量动作的原则。
22.StringBuilder 和 String 的区别?
String虽然是一个引用类型,但在赋值操作时会产生一个新的对象,而StringBuilder则不会,
所以在大量字符串拼接或频繁对某一字符串进行操作时最好使用StringBuilder,不要使用String。
23.explicit 和 implicit 的含义?
explicit和implicit属于转换运算符,如用这两者可以让我们自定义的类型支持相互交换,
explicti表示显式转换,如从A->B必须进行强制类型转换(B=(B)A),
implicit表示隐式转换,如从B->A只需直接赋值(A=B),
隐式转换可以让我们的代码看上去更漂亮、更简洁易懂,所以最好多使用 implicit 运算符。
不过!如果对象本身在转换时会损失一些信息(如精度),那么我们只能使用 explicit 运算符,以便在编译期就能警告客户调用端。
24.params 有什么用?
params关键字在方法成员的参数列表中使用,为该方法提供了参数个数可变的能力,
它在只能出现一次并且不能在其后再有参数定义,之前可以。
25.什么是反射
反射,Reflection,通过它我们可以在运行时获得各种信息,
如程序集、模块、类型、字段、属性、方法和事件,
通过对类型动态实例化后,还可以对其执行操作,一般用于插件式框架程序和设计模式的实现,
当然反射是一种手段可以充分发挥其能量来完成你想做的任何事情。
1 C
#
中数据类型的分类:
(
1
)值类型:它存储在内存的堆栈中,表示实际数据。包括:基本数据类型(字符串除外)、结构、枚举。
(
2
)引用类型:它存储在内存的堆中,表示对象地址。包括:字符串、数组、类、接口、委托。
2
C
#
声明常量的声明方式:
(1)静态常量(const):<访问修饰符> 数据类型 常量名称=常量值
(2)动态常量(readonly):
|
静态常量(const)
|
动态常量(readonly)
|
定义
|
声明的同时要设置常量值。
|
声明的时候可以不需要进行设置常量值,可以在类的构造函数中进行设置。
|
类型限制
|
首先类型必须属于值类型范围,且其值不能通过new来进行设置。
|
没有限制,可以用它定义任何类型的常量。
|
对于类对象而言
|
对于所有类的对象而言,常量的值是一样的。
|
对于类的不同对象而言,常量的值可以是不一样的。
|
内存消耗
|
无。
|
要分配内存,保存常量实体。
|
综述
|
性能要略高,无内存开销,但是限制颇多,不灵活。
|
灵活,方便,但是性能略低,且有内存开销。
|
3
装箱和拆箱:
( 1 )装箱:将值类型转换成引用类型。( is as )
( 2 )拆箱:将引用类型转换成值类型。
( 1 )装箱:将值类型转换成引用类型。( is as )
( 2 )拆箱:将引用类型转换成值类型。
4
Typeof
运算符:
C# 没有自己的内库,但是它共享了 .Net 的内库。 C# 中的基本数据类型只是 .Net 基本数据类型的别名而已。获得系统原型对象的类型。
C# 没有自己的内库,但是它共享了 .Net 的内库。 C# 中的基本数据类型只是 .Net 基本数据类型的别名而已。获得系统原型对象的类型。
5
访问域,访问修饰符
( 1 ) 访问域: public 、 private 、 internal 、 protected 、 protected internal
( 2 ) 访问修饰符: partial 、、 sealed 、 virtual 、 override 、 abstract 、 new 、 extern 、 static
( 1 ) 访问域: public 、 private 、 internal 、 protected 、 protected internal
( 2 ) 访问修饰符: partial 、、 sealed 、 virtual 、 override 、 abstract 、 new 、 extern 、 static
6
构造函数和析构函数:
( 1 )构造函数:与类同名,无返回值。可以重载。
( 2 )析构函数:与类同名,无返回值。不能重载。一个类只有一个析构函数。由垃圾回收器自动调用。
( 1 )构造函数:与类同名,无返回值。可以重载。
( 2 )析构函数:与类同名,无返回值。不能重载。一个类只有一个析构函数。由垃圾回收器自动调用。
7
构造函数调用:
( 1 )调用基本构造函数: : base() 或: base(string name,int age)
( 2 )调用基类普通方法: base. 基类方法名()
( 1 )调用基本构造函数: : base() 或: base(string name,int age)
( 2 )调用基类普通方法: base. 基类方法名()
8
方法调用:
( 1 ) 实例对象调用:类名 . 方法名( [ 参数列表 ] )
( 2 )静态类调用:类名 . 方法名( [ 参数列表 ] )
( 1 ) 实例对象调用:类名 . 方法名( [ 参数列表 ] )
( 2 )静态类调用:类名 . 方法名( [ 参数列表 ] )
9
方法重载与方法重写:
( 1 )方法重载:在同一个类中的方法,返回类型相同,方法名相同,方法签名不同。
( 2 )方法重写:在基类与子类中,基类方法是: virtual 、abstract 时,方可在子类中用override重写基类方法。
( 1 )方法重载:在同一个类中的方法,返回类型相同,方法名相同,方法签名不同。
( 2 )方法重写:在基类与子类中,基类方法是: virtual 、abstract 时,方可在子类中用override重写基类方法。
10
OOP
编程三大特点:
(
1
)封装:
( 2 )继承:
( 3 )多态:多态的两种表现形式:方法重载和方法重写。
( 2 )继承:
( 3 )多态:多态的两种表现形式:方法重载和方法重写。
11
抽象类和接口的区别与联系:
抽象类:至少含有一个抽象方法的类,不能被实例化。包含属性、方法声明、功能定义和实现。
接口:接口是一个特殊的抽象类。仅限于对方法、索引器、及属性的声明。
抽象类:至少含有一个抽象方法的类,不能被实例化。包含属性、方法声明、功能定义和实现。
接口:接口是一个特殊的抽象类。仅限于对方法、索引器、及属性的声明。
12
委托:
( 1 )它包含对方法而不是方法名的引用,使用委托可以在运行时动态设定要调用的方法。委托将名称与方法的定义连接起来。
( 2 )委托的作用:定义事件句柄( EventHander ) , 目的:自定义事件。委托实际上是函数的指针,它能引用函数。
( 3 )使用委托的步骤:
a 定义委托 : [ 访问修饰符 ] delegate 返回类型 委托名 ()
b 实例化委托:使其指向某个方法。
c 使用委托:
( 1 )它包含对方法而不是方法名的引用,使用委托可以在运行时动态设定要调用的方法。委托将名称与方法的定义连接起来。
( 2 )委托的作用:定义事件句柄( EventHander ) , 目的:自定义事件。委托实际上是函数的指针,它能引用函数。
( 3 )使用委托的步骤:
a 定义委托 : [ 访问修饰符 ] delegate 返回类型 委托名 ()
b 实例化委托:使其指向某个方法。
c 使用委托:
13
事件:
( 1 )事件 (Event) :是一种函数成员,是类和对象发出的消息。以通知发生了某个特定的行为或某个特定的条件已经成立。
定义事件:
[ 访问修饰符 ] event 委托名 事件名
定义事件时,发行者首先定义委托,然后根据委托定义事件。
( 1 )事件 (Event) :是一种函数成员,是类和对象发出的消息。以通知发生了某个特定的行为或某个特定的条件已经成立。
定义事件:
[ 访问修饰符 ] event 委托名 事件名
定义事件时,发行者首先定义委托,然后根据委托定义事件。
Public delegate void delegateMe() //
定义委托
public event delegateMe eventMe; // 定义事件
( 2 )订阅事件:只是添加了一个委托,事件引发时该委托将调用一个方法。
public event delegateMe eventMe; // 定义事件
( 2 )订阅事件:只是添加了一个委托,事件引发时该委托将调用一个方法。
订阅事件:
eventMe+=new delegateMe(objA.Method) //objA.Method 方法订阅了事件 eventMe
eventMe+=new delegateMe(objA.Method) //objA.Method 方法订阅了事件 eventMe
14
控件与组件:
( 1 )控件:可视化界面组件称为控件。(可视化的类),所有 Windows 窗体都是从 System.Windows.Forms.Control 类派生出来的类。
( 2 )组件:不含可视化的界面。
( 1 )控件:可视化界面组件称为控件。(可视化的类),所有 Windows 窗体都是从 System.Windows.Forms.Control 类派生出来的类。
( 2 )组件:不含可视化的界面。