C# 1-静态类和静态类成员 引用类型和值类型 事件和委托

静态类和静态类成员

静态类:类可以声明为static的,以指示它仅包含静态成员且不能实例化对象(如Console),即不能使用new关键字创建静态类的实例,静态类是密封的,不可被继承。

静态类成员:静态成员可以在类的实例之间共享,可以把它们看作是类的全局对象,通常用于表示不会随对象状态而变化的数据或计算。使用类中的静态成员时,需要事先初始化这些成员。一个类只能有一个静态构造函数,该构造函数不能直接调用,无论创建了多少个类实例,其静态构造函数都只调用一次。普通数据成员属于类的一个具体的对象,只有对象被创建了,普通数据成员才会被分配内存,而静态数据成员属于整个类,即使没有任何对象创建,类的静态数据成员变量也存在。外部访问类的静态成员只能通过类名来访问。

在C#中,所有的类都派生于同一个类object,object是继承层次结构中的根,所以可以把所有的对象看作是类object的实例,这就是,Console.WriteLine()可以处理无数多种参数组合的原因,可以把任何对象的输出结果写到屏幕上。

 

OOP技术

接口:接口是把公共方法和属性组合起来,以封装特定功能的一个集合,一旦定义了接口,就可以在类中实现它,这样,类就可以支持接口所指定的所有属性和成员。一个类可以支持多个接口,多个类也可以支持相同的接口。注意:接口不能单独存在,不能像实例化一个类那样实例化接口,另外,接口不能包含实现其成员的任何代码,而只能定义成员本身,实现过程必须在实现接口的类中实现。尽管不能实例化接口,但可以建立接口类型的变量,然后就可以在支持该接口的对象上使用这个变量访问该接口提供的方法和属性。

 

引用类型和值类型

在C#中有两种类型的数据,一种是值类型数据(表示实际的数据),一种是引用类型数据(表示指向存储在内存堆中的数据的指针或引用)。其基本区别在于它们在内存中的存储方式,值类型在内存的一个地方(称为栈)存储它们自己和它们的内容;引用类型在内存的一个地方(称为堆)存储一个引用,而在另一个地方(称为堆)存储内容。值类型总是包含一个值,而引用类型可以是null表示它们不包含值。像int、float、bool等基础类型以及用struct定义的类型(即结构体)都是值类型;而string,数组,以及用class定义的类型(即类)等都是引用类型。提示:结构体和类非常类似,它们的关键区别是,结构体是值类型而类是引用类型,所以,自己定义类型的时候,用struct定义还是class定义,即是定义一个值类型还是一个引用类型。

作为函数参数。对于值类型来说,当其作为函数参数时,若希望在函数中被修改,需要用ref或者out进行标识才能真正实现;对于引用类型则相反,若希望在函数中被修改,需要给此类型提供clone函数,不过对于引用类型,提供一个clone函数不是一件容易的事。

 

事件和委托

事件是对象发送的消息,以发信号通知操作的发生。在事件通信中,事件发送方类不知道哪个对象或方法将接收到它引发的事件,所需要的是在源和接收方之间存在一个媒介(或类似指针的机制)。.NET Framework定义了委托(Delegate),它提供函数指针的功能。委托是可保存对方法的引用的类,与其他的类不同,委托类具有一个签名,并且它只能对与其签名匹配的方法进行引用,这样委托就等效于一个类型安全函数指针或一个回调,委托具有许多功能,例如,事件处理功能。

.NET Framework中的事件模型基于具有事件委托,该委托将事件与事件处理程序连接。引发事件需要两个元素:标识对事件提供相应的方法的委托;保存事件数据的类。

 

参考:http://blog.sina.com.cn/s/blog_615c388d0100rcrx.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值