C#语言的特殊语法

阅读:116 - - 类别:《DotNet

委托 delegate

  1. 委托(delegate)是对函数原型的包装,相当于函数指针,是引用类型
    • ① 委托的声明:public delegate double MyDelegate(double x);
    • ② 委托的实例化:MyDelegate d2=new MyDelegate(obj.myMethod);
    • ③ 委托的调用:委托变量名(参数列表),如 d2(8.9)
  2. 委托的合并,又称多播 MultiCastDelegate
    • ① 一个委托实例中可以“包含”多个函数
    • ② 调用委托,就是调用其中多个函数
    • ③ 多个函数间的先后顺序是没有意义的,返回值也就没有太多意义
    • ④ 运算符 +-、+=、-=,动态地增减其中的函数,提高程序的灵活性

事件 event

  1. 事件(event)相当于回调函数
    • ① 事件的声明 public event 委托名 事件名;
    • ② 事件的注册于移除:事件名 += 或 -= (在事件所在类的外面,只能用以上两个运算符)
    • ③ 事件的发生:事件名(参数列表),相当于回调所注册的函数
  2. 用户界面中的事件实例:按钮点击事件
this.button1.Click += new System.EventHandler(this.button1_Click);

private void button1_Click(object sender,EventArgs e)
{
    this.label1.Text =DateTime.Now.ToString();
}
  1. 定义及使用事件的6步曲

    • ① 声明事件参数类:class xxxEventArgs{}
    • ② 声明委托:delegate void xxxEventHandler(obj,args)
    • ③ 定义事件:public event 类型 名称
    • ④ 发生事件:事件名(参数)
    • ⑤ 定义一个方法:void 方法名(obj,args)
    • ⑥ 注册事件:xxx.事件 += new 委托(方法名)
  2. 泛型(Generic)

List<Book> books = new List<Book>();
Book book = books[0];

  1. 匿名方法
    • ① 声明方法:delegate(参数){方法体}
    • ② 可以当成一个匿名方法:new Thread(new ThreadStart(delegate(){...}));
    • ③ 可以被隐式转换为一个兼容的委托类型:new Thread(delegate(){...});
  2. Lambda 表达式,相当于匿名方法的简写
    • 省略 delegate ,甚至省略参数类型
    • 直接用(参数)=>{语句或表达式}
    • 示例:
      • button1.Click += (sender,e)=>{...}
      • new Thread(()=>{...}).Start();
      • PlotFun(x=x*x, 0, 100);
  3. Linq (Language Integrated Query)

常见形式:

from c in customers where c.Age>10 orderby c.Name select new {c.Name, c.Phone}

使用示例:

using System;
using System.Linq;

class Program
{
    public static void Main(string[] args)
    {

        int[] arr = new int[] { 8, 5, 89, 3, 56, 4, 1, 58 };

        var m = from n in arr where n < 5 orderby n select n*n;

        foreach (var n in m)
        {
            Console.WriteLine(n);
        }
        Console.Read();
    }
}

总结:匿名函数使用 delegate;Lambda 表达式使用 => ;Linq 使用 from,where,select

评论已关闭!