第3章面向对象技术_第1页
第3章面向对象技术_第2页
第3章面向对象技术_第3页
第3章面向对象技术_第4页
第3章面向对象技术_第5页
已阅读5页,还剩10页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、第五讲 代表 事件和索引指示器5.1使用索引器索引器能够将索引用于对象来获得该对象所存储的值。定义格式:Public 数据类型 thisint index Get 想返回的值Set 想赋予的值修饰符有:l newl publicl protectedl internall privatel virtuall sealedl overridel abstract例如 下面的例子用于打印出小组人员的名单程序清单 using Systemclass Teamstring s_name = new string8;public string thisint nIndexGetreturn s_name

2、nIndex;Sets_namenIndex = value;class Testpublic static void Main()Team t1 = new Team();for(int i=0; i8 ;i+)Console.WriteLine(t1i);根据域名解析 IP 地址程序清单 using System;using System.Net;class ResolveDNSIPAddress m_arrayIPs;Public void Resolve(string s_host)IPHostEntry ip = DNS.GetHostByName(s_host);m_arrayIP

3、s = ip.AddressList;public IPAddress thisint nIndexGetreturn m_arrayIPsnIndex;public int IPLengthGetreturn m_arrayIPs.Length;class TestApppublic static void Main()ResolveDNS resolver1 = new ResolveDNS();resolver1.Resolve();int n = resolver1.IPLength;Console.WriteLine(“Get the IP Address o

4、f the host”);Console.WriteLine();for(int i=0;isecond) Int temp=first; First=second; Second=temp; 2)、public static void Descending (ref int first,ref int second) If(first second ) int tmp = first; first = second; second = tmp; public static void Descending( ref int first, ref int second ) if (first s

5、econd ) int tmp = first; first = second; second = tmp; public static void Main() SortClass.Sort up = new SortClass.Sort(Ascending); /创建代表对象 SortClass.Sort down = new SortClass.Sort(Descending); SortClass doIT = new SortClass(); /创建sortclass对象 SortClass.val1 = 310; /设置排序变量 SortClass.val2 = 220; Conso

6、le.WriteLine(Before Sort: val1 = 0, val2 = 1, SortClass.val1, SortClass.val2); doIT.DoSort(up); /调用dosort方法 Console.WriteLine(After Sort: val1 = 0, val2 = 1, SortClass.val1, SortClass.val2); Console.WriteLine(Before Sort: val1 = 0, val2 = 1, SortClass.val1, SortClass.val2); doIT.DoSort(down); Consol

7、e.WriteLine(After Sort: val1 = 0, val2 = 1, SortClass.val1, SortClass.val2); 5.3 事件形象地说, 事件 event 就是类或对象用来“发出通知” 的成员, 通过提供事件的句柄,客户能够把事件和可执行代码联系在一起。事件是类发出的通知,指出了发生某种事情。这样其他类可以根据通知执行某种操作。5.3.1创建事件创建并使用事件的步骤:l 为事件建立代表l 创建一个类来给事件处理程序传递参数、l 声明事件对应的代码l 创建事件发生时将执行的代码。1、 事件的代表要使用事件,首先为事件创建一个代表。创建格式为:Delegat

8、e void EventHandlerName(object source, xxxEventArgs e);EventHandlerName 事件代表名称。事件的代表总是两个参数,第一个是引发事件的源,第二个参数是一个可包含事件处理程序可以使用的数据。例:Delegate void CharEventHandler(object source, CharEventArgs e);2、 EventArgs 类EventArgs类用于将数据传递给事件处理程序,它可以派生出一些新类,即包含用于存储所需值的数据成员。派生类格式:Public class xxxEventArgs:EventArgs/

9、数据成员Public xxxEventArgs(type name) 初始化数据成员假如创建的代表名为CharEventHandler,它传递一个CharEventArgs对象。代码:Public class CharEventArgs:EventArgs Public char currchar; Public CharEventArgs(char Currchar) This.Currchar=Currchar; 3、 事件类的代码创建一个引发事件的类,包含事件的声明。事件声明格式:Public event xxxEventHandler Eventname;xxxEventHandler

10、 /事件代表、Eventname 事件实例。例:Class CharChecker Char curr_char; Public event CharEventHandler TestChar; /创建能委托给代表的事件对象 Public char curr_char Get Return curr_char;Set If (TestChar!=null) CharEventArgs args=new CharEventArgs(value); TestChar(this,args); /调用事件代表 Curr_char=args.CurrChar; 4、 创建事件处理程序事件处理程序在事件发

11、生时被通知,事件处理程序是使用代表的格式创建的一个方法。格式:Void handlername(object source,xxxEventArgs argName) /处理代码。例:static void Drop_A(object scource,CharEventArgs e) If(e.CurrChar=a| e.CurrChar=A) Console.WriteLine(“aaaaaaaa”); e.CurrChar=X; 5、 将事件处理程序和事件关联起来要将事件处理程序和事件关联起来,必须首先声明一个包含事件的对象。例:CharChecker tester=new CharChe

12、cker();要将事件处理程序和事件关联起来使用+=运算符。格式为:oibjectWithEventName.EventObj +=new EventDelegateName(EventName);oibjectWithEventName /事件类声明的对象+= /表示指示器例:Tester.TestChar +=new CharEventHandler(Drop_A);6、 实例:using System;delegate void CharEventHandler(object source, CharEventArgs e); /定义代表public class CharEventArg

13、s : EventArgs /定义传递事件类 public char CurrChar; public CharEventArgs(char CurrChar) this.CurrChar = CurrChar; class CharChecker char curr_char; public event CharEventHandler TestChar; /创建事件实例 public char Curr_Char get return curr_char; set if (TestChar != null ) CharEventArgs args = new CharEventArgs(v

14、alue); TestChar(this, args); curr_char = args.CurrChar; class myApp static void Main() CharChecker tester = new CharChecker(); tester.TestChar += new CharEventHandler(Drop_A); tester.Curr_Char = B; Console.WriteLine(0, tester.Curr_Char); tester.Curr_Char = r; Console.WriteLine(0, tester.Curr_Char);

15、tester.Curr_Char = a; Console.WriteLine(0, tester.Curr_Char); tester.Curr_Char = d; Console.WriteLine(0, tester.Curr_Char); static void Drop_A(object source, CharEventArgs e) if(e.CurrChar = a | e.CurrChar = A ) Console.WriteLine(Dont like a!); e.CurrChar = X; 7、多个事件处理程序using System;delegate void Ch

16、arEventHandler(object source, CharEventArgs e);public class CharEventArgs : EventArgs public char CurrChar; public CharEventArgs(char CurrChar) this.CurrChar = CurrChar; class CharChecker char curr_char; public event CharEventHandler TestChar; public char Curr_Char get return curr_char; set if (Test

17、Char != null ) CharEventArgs args = new CharEventArgs(value); TestChar(this, args); curr_char = args.CurrChar; class MyApp static void Main() CharChecker tester = new CharChecker(); tester.TestChar += new CharEventHandler(Drop_A); tester.TestChar += new CharEventHandler(Change_D); tester.Curr_Char =

18、 B; Console.WriteLine(0, tester.Curr_Char); tester.Curr_Char = r; Console.WriteLine(0, tester.Curr_Char); tester.Curr_Char = a; Console.WriteLine(0, tester.Curr_Char); tester.Curr_Char = d; Console.WriteLine(0, tester.Curr_Char); static void Drop_A(object source, CharEventArgs e) if(e.CurrChar = a |

19、 e.CurrChar = A ) Console.WriteLine(Dont like a!); e.CurrChar = X; / new event handler. static void Change_D(object source, CharEventArgs e) if(e.CurrChar = d | e.CurrChar = D ) Console.WriteLine(Ds are good!); e.CurrChar = Z; 7、 删除事件处理程序using System;delegate void CharEventHandler(object source, Cha

20、rEventArgs e);public class CharEventArgs : EventArgs public char CurrChar; public CharEventArgs(char CurrChar) this.CurrChar = CurrChar; class CharChecker char curr_char; public event CharEventHandler TestChar; public char Curr_Char get return curr_char; set if (TestChar != null ) CharEventArgs args

21、 = new CharEventArgs(value); TestChar(this, args); curr_char = args.CurrChar; class MyApp static void Main() CharChecker tester = new CharChecker(); tester.TestChar += new CharEventHandler(Drop_A); tester.TestChar += new CharEventHandler(Change_D); tester.Curr_Char = B; Console.WriteLine(0, tester.C

22、urr_Char); tester.Curr_Char = r; Console.WriteLine(0, tester.Curr_Char); tester.Curr_Char = a; Console.WriteLine(0, tester.Curr_Char); tester.Curr_Char = d; Console.WriteLine(0, tester.Curr_Char); / Remove event handler. Console.WriteLine(nRemoving event handler.); tester.TestChar -= new CharEventHa

23、ndler(Change_D); / Try D-a-d. tester.Curr_Char = D; Console.WriteLine(0, tester.Curr_Char); tester.Curr_Char = a; Console.WriteLine(0, tester.Curr_Char); tester.Curr_Char = d; Console.WriteLine(0, tester.Curr_Char); static void Drop_A(object source, CharEventArgs e) if(e.CurrChar = a | e.CurrChar =

24、A ) Console.WriteLine(Dont like a!); e.CurrChar = X; / new event handler. static void Change_D(object source, CharEventArgs e) if(e.CurrChar = d | e.CurrChar = D ) Console.WriteLine(Ds are good!); e.CurrChar = Z; public delegate void EventHandler(object sender, EventArgs e);public class Button: Cont

25、rolpublic event EventHandler Click;protected void OnClick(EventArgs e) if (Click != null) Click(this, e);public void Reset() Click = null;5.4 事件的预订和撤消两个按钮 OK 和 Cancel 按钮程序清单 public class LoginDialog: FormButton OkButton;Button CancelButton;public LoginDialog() OkButton = new Button(.);OkButton.Click

26、 += new EventHandler(OkButtonClick);CancelButton = new Button(.);CancelButton.Click += new EventHandler(CancelButtonClick);void OkButtonClick(object sender, EventArgs e) / 处理 OkButton.Click 事件void CancelButtonClick(object sender, EventArgs e) / 处理 CancelButton.Click 事件使用了 Button 类的两个实例 ,事件的预订是通过为事件加上左操作符+= 来实现的OkButton.Click += new EventHandler(OkButtonClick);这样 只要事件被触发 方法就会被调用事件的撤消则采用左操作符 -=OkButton.Click -= new EventHandler(OkButtonClick);5.5 事件访问器添加访问器声明 add-accessor-declaration和删除访问器声明 remove-accessor-declarationclass Control: Component/ Unique keys for eventss

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

最新文档

评论

0/150

提交评论