C#高级学习第二章委托,Lambda表达式和事件

来源:互联网 发布:软件开发标准等级 编辑:程序博客网 时间:2024/05/16 15:35

using System;

委托:

1.
private delegate String GetString(); 委托是一个类型,这个类型可以赋值一个方法的引用
int x=40;
GetString a=new GetString(x.ToString);
String s=a();
2.
GetString a=x.ToString;
String s=a.Invoke();
委托类型可以作为方法的参数

Action:

Action是系统内置的委托,是一个没有返回值,没有参数的类型
Action<int> 代表没有返回值,有一个int参数的类型
Action<int,int> 代表没有返回值,有两个int参数的类型
Action后面的泛型,代表委托方法里头的参数与泛型保持一致

Func:

Func是系统内置的委托,是有一个返回值,没有参数的类型
Func<int> a  这代表有一个int返回值,没有参数的类型
Func<int,string>这代表有一个string返回值,一个int参数的类型
Func后面的泛型最后指的是返回值类型,前面的指的是参数类型,可以写0-16个参数类型

int类型的冒泡排序:

private bool swapped=true;
void Sort(int[] intArray)
do
{
   swapped=false;
    for(int i=0;i<intArray.Length-1;i++)
 {
      if(intArray[i]>intArray[i+1])
   {
       int temp=intArray[i];
       intArray[i]=intArray[i+1];
       intArray[i+1]=temp;
       swapped=true;
   }
 }
{while(swapped);

其他类型的排序:

 public void EmployeeSort<T>(T[] SortArray,Func<T,T,int> CompareMethod)
    {
        bool swapped = true;
        do
        {
            swapped = false;
            for (int i = 0; i < SortArray.Length - 1; i++)
            {
                if (CompareMethod(SortArray[i],SortArray[i+1])>0)
                {
                    swapped = true;
                    T temp = SortArray[i];
                    SortArray[i] = SortArray[i + 1];
                    SortArray[i + 1] = temp;
                }
            }
        } while (swapped);
    }


多播委托:

Action a=Text1;
a+=Text2;  添加一个委托
a-=Text2;   减少一个委托
a.GetInvocationList()  得到所有的委托
a.DynamicInvoke();    输出委托

匿名方法:

每一个委托都可以直接用匿名方法赋值,匿名方法本质上是一个方法,只是没有名字,任何使用委托变量的地方都可以使用匿名方法赋值
Func<int,int,int> a=delegate(int arg1,int arg2)
{
    return arg1+arg2;
};


Lambda表达式:

Lambda表达式是可以替代匿名方法的,也是一种方法
Func<int,int,int> a=(arg1,arg2)=>
{
     return arg1+arg2;
};
如果委托参数只有一个的话,可以省略小括号,如果返回值只有一句话,可以不用花括号和return
Func<int,int> a=arg1=>arg1+1;

事件:

public delegate void MyDelegate;

public event MyDelegate eventDelegate;


观察者设计模式:

在被观察者中设立一个委托,在很多观察者中注册委托方法

通过调用委托就不用修改被观察者的代码了,直接修改委托的+-;

事件只能在类的内部使用,不能再类的外部使用,防止在其他类触发委托

public event Action CatCome;  声明一个事件,发布一个消息

在一个类发布委托或事件,其他的类中注册,利用这个委托调用其他类的方法


原创粉丝点击