C#学习总结(5)

2019-08-30 16:42

包含有助于获取(读取或计算)或设置(写入)属性的可执行语句。访问器(accessor)声明可包含一个 get 访问器、一个 set 访问器,或者同时包含二者。

索引器(Indexer): 允许一个对象可以像数组一样被索引。当您为类定义一个索引器时,该类的行为就会像一个 虚拟数组(virtual array) 一样。您可以使用数组访问运算符([ ])来访问该类的实例。

索引器(Indexer)的用途:索引器的行为的声明在某种程度上类似于属性(property)。就像属性(property),您可使用 get 和 set 访问器来定义索引器。但是,属性返回或设置一个特定的数据成员,而索引器返回或设置对象实例的一个特定值。换句话说,它把实例数据分为更小的部分,并索引每个部分,获取或设置每个部分。

定义一个属性(property)包括提供属性名称。索引器定义的时候不带有名称,但带有 this 关键字,它指向对象实例。 重载索引器(Indexer):索引器(Indexer)可被重载。索引器声明的时候也可带有多个参数,且每个参数可以是不同的类型。没有必要让索引器必须是整型的。C# 允许索引器可以是其他类型。

委托(Delegate):C# 中的委托(Delegate)类似于 C 或 C++

中函数的指针。委托(Delegate) 是存有对某个方法的引用的一种引用类型变量。引用可在运行时被改变。

注:委托(Delegate)特别用于实现事件和回调方法。所有的委托(Delegate)都派生自 System.Delegate 类。 声明委托(Delegate):委托声明决定了可由该委托引用的方法。委托可指向一个与其具有相同标签的方法。

实例化委托(Delegate):一旦声明了委托类型,委托对象必须使用 new 关键字来创建,且与一个特定的方法有关。当创建委托时,传递到 new 语句的参数就像方法调用一样书写,但是不带有参数。

委托的多播(Multicasting of a Delegate):委托对象可使用 \运算符进行合并。一个合并委托调用它所合并的两个委托。只有相同类型的委托可被合并。\运算符可用于从合并的委托中移除组件委托。使用委托的这个有用的特点,您可以创建一个委托被调用时要调用的方法的调用列表。这被称为委托的 多播(multicasting),也叫组播。下面的程序演示了委托的多播:

usingSystem; delegateintNumberChanger(int n); namespaceDelegateAppl { classTestDelegate { staticintnum=10; publicstaticintAddNum(int p) { num+= p; returnnum; }

publicstaticintMultNum(int q) {

num*= q; returnnum; }

publicstaticintgetNum() {

returnnum; }

staticvoidMain(string[]args) {

// 创建委托实例 NumberChangernc;

NumberChanger nc1 =newNumberChanger(AddNum); NumberChanger nc2 =newNumberChanger(MultNum); nc= nc1; nc+= nc2; // 调用多播 nc(5);

Console.WriteLine(\,getNum()); Console.ReadKey(); } } }

当上面的代码被编译和执行时,它会产生下列结果:Value of Num: 75

事件(Event): 基本上说是一个用户操作,如按键、点击、鼠标移动等等,或者是一些出现,如系统生成的通知。应用程序需要在事件发生时响应事件。例如,中断。事件是用于进程间通信。

通过事件使用委托:事件在类中声明且生成,且通过使用同一个类或其他类中的委托与事件处理程序关联。包含事件的类用于发布事件。这被称为 发布器(publisher) 类。其他接受该事件的类被称为 订阅器(subscriber) 类。事件使用 发布-订阅(publisher-subscriber) 模型。 发布器(publisher): 是一个包含事件和委托定义的对象。事件和委托之间的联系也定义在这个对象中。发布器(publisher)类的对象调用这个事件,并通知其他的对象。 订阅器(subscriber): 是一个接受事件并提供事件处理程序的对象。在发布器(publisher)类中的委托调用订阅器(subscriber)类中的方法(事件处理程序)。 声明事件(Event):在类的内部声明事件,首先必须声明该事件的委托类型。例如: publicdelegatevoidBoilerLogHandler(string status); 然后,声明事件本身,使用 event 关键字: // 基于上面的委托定义事件 publiceventBoilerLogHandlerBoilerEventLog; 上面的代码定义了一个名为 BoilerLogHandler 的委托和一个名为 BoilerEventLog 的事件,该事件在生成的时候会调用委托。

本实例提供一个简单的用于热水锅炉系统故障排除的应用程序。当维修工程师检查锅炉时,锅炉的温度和压力会随着维修工程师的备注自动记录到日志文件中。

usingSystem; usingSystem.IO;

namespaceBoilerEventAppl {

// boiler 类 classBoiler {

privateint temp; privateint pressure; publicBoiler(int t,int p) {

temp= t; pressure= p; }

publicintgetTemp() {

return temp; }

publicintgetPressure() {

return pressure; } }

// 事件发布器

classDelegateBoilerEvent {

publicdelegatevoidBoilerLogHandler(string status);

// 基于上面的委托定义事件

publiceventBoilerLogHandlerBoilerEventLog;

publicvoidLogProcess() {

string remarks =\; Boiler b =newBoiler(100,12);


C#学习总结(5).doc 将本文的Word文档下载到电脑 下载失败或者文档不完整,请联系客服人员解决!

下一篇:刑法博士、法学教授、检察官争辩的8个刑法问题

相关阅读
本类排行
× 注册会员免费下载(下载后可以自由复制和排版)

马上注册会员

注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信: QQ: