xx-20xx年c核心语法总结内容摘要:

set { m_age = value。 } } public string Sex { get { return m_sex。 } set { m_sex=value。 } } } class B { private ArrayList m_list = new ArrayList()。 public int this[string name, string sex] { get { foreach (A a in m_list) { if ((name) amp。 amp。 (sex)) { return。 } } return 1。 } set { A a=new A()。 =name。 =sex。 =value。 //value的类型与返回值类型一致 (这里是 int) (a)。 } } } class Program { static void Main(string[] args) { B b = new B()。 b[李志伟 , 男 ] = 20。 b[张三 , 男 ] = 10。 (b[李志伟 , 男 ]+ +b[张三 , 男 ])。 } } (4) 注意:索引器不能是静态 (static)的。 (delegate) (1) 委托的使用 (类似指向函数的指针 ) 下面程序运行结果:李志伟 delegate void PrintDelegate(string s)。 //申明委托 class A { public void Print(string s)//与委托的返回值、参数相同的函数 { (s)。 } } class Program { static void Main(string[] args) { A a = new A()。 PrintDelegate s=new PrintDelegate()。 //新建委托链 s(李 志伟 )。 //执行委托连 } } (2) 委托链的使用 下面程序的运行结果: a1李志伟 a2李志伟 a2李志伟 a1李志伟 a2李志伟 delegate void PrintDelegate(string s)。 //申明委托 class A { private string name。 public A(string name) { = name。 } public void Print(string s)//与委托的返回值、参数相同的函数 { (name+s+ )。 } } class Program { static void Main(string[] args) { A a1 = new A(a1)。 A a2 = new A(a2)。 PrintDelegate s=new PrintDelegate()。 //新建委托链 s += new PrintDelegate()。 //增加委托链 s += new PrintDelegate()。 //增加委托链 s(李志伟 )。 //执行委托链 ()。 s = new PrintDelegate()。 //减少委托链 s(李志伟 )。 //执行委托链 } } (3) 直接使用委托调用匿名方法 delegate void PrintDelegate(string s)。 //申明委托 class Program { static void Main(string[] args) { PrintDelegate s=null。 s += delegate(string temp) { (temp)。 }。 //委托指向匿名方法 s(李志伟 )。 //执行委托连 } } (4) 使用 ActionT与 Funcin T,out TResult省略委托的定义 当委托没有返回值时使用 ActionT,有返回值时使用 Funcin T,out TResult。 例如: class Program { private void Hello(string name)//无返回值 { (你好, +name+!)。 } private string GETAge(int age)//有返回值 { (我的年龄: + age + !)。 return 我的年龄: + age + !。 } static void Main(string[] args) { Program p = new Program()。 Actionstring action =。 //Actionstring hello = new Actionstring()。 action(李志伟 )。 //执行委托 Funcint, string fun =。 (fun(20))。 //执行委托 } } (5) Lambda表达式,方便的使用匿名方法 class Program { static void Main(string[] args) { //标准的 Lambda格式 Funcint, int, string sum = (int a, int b) = { return 和是: + (a + b)。 }。 (sum(5, 6))。 //和是: 11 //简写格式 Actionstring action = param = (param)。 //委托匿名方法 action(调用委托 )。 Funcint, Double func = param = param * param。 //有返回值的匿 名方法 (func(5))。 //25,调用委托返回 25 } } (event) (1) 实现事件委托的原理 下面的程序运行的结果: 事件被触发, 执行事件委托链 ! 执行触发事件执行的方法 ! 执行触发事件执行的方法 ! class A { public delegate void Publish()。 //事件方法的委托 public event Publish OnPublish。 //事 件委托链 public void OnEvent()//触发事件,执行事件委托链 { if (OnPublish != null)//事件委托链不为 null { (事件被触发, 执行事件委托链 !)。 OnPublish()。 //执行事件委托链 } } public void Event()//触发事件执行的方法 { (执行触发事件执行的方法 !)。 } } class Program { static void Main(string[] args) { A a = new A()。 += new ()。 //订阅 (注册 )事件,本质 是增加委托链 += new ()。 //订阅 (注册 )事件,本质是增加委托链 ()。 //触发事件,执行事件委托链 } } (2) .NET Framework事件设计准则 申明 delegate 时,使用 void 类型当做返回值, EventName 事件的事件委托时EventNameEventHandler,事件接受两个传入参数,一律命名 sender与 e。 定义一个提供事件数据的类,对 类 EventNameEventArgs进行命名,从 ,然后添加所有事件特定的成员。 //包含事件数据的类,命名方式 :EventNameEventArgs class AEventArgs : EventArgs { private readonly string name。 //只读属性 public AEventArgs(string name) { = name。 } public string Name { get { return name。 } } } //引发事件的类 class B { //事件方法的委托,命名方式 EventNameEventHandler public delegate void PublishEventHandler(object sender,AEventArgs e)。 //事件委托链 public event PublishEventHandler Publish。 //引发执行事件委托链的方法,命名方式 :OnEventName protected virtual void OnEvent(AEventArgs e) { PublishEventHandler handler = Publish。 if (handler != null) { handler(this,e)。 } } //触发事件的方法 public void TriggerEvent(string name) { (事件被触发。 )。 //调用引发执行事件委托链的方法 OnEvent(new AEventArgs(name))。 }。
阅读剩余 0%
本站所有文章资讯、展示的图片素材等内容均为注册用户上传(部分报媒/平媒内容转载自网络合作媒体),仅供学习参考。 用户通过本站上传、发布的任何内容的知识产权归属用户或原始著作权人所有。如有侵犯您的版权,请联系我们反馈本站将在三个工作日内改正。