C#高级编程 - 委托(delegate)的代码

下面的资料是关于C#高级编程 - 委托(delegate)的内容,应该是对小伙伴们也有用处。

public class MyClass
{
public delegate string delegateTest(string dval1,string dval2);
public string ConnectString(string val1,string val2)
{
return val1+val2;
}
public static void Main()
{
MyClass mc = new MyClass();
delegateTest t = new delegateTest(mc.ConnectString);
Console.WriteLine(t("Hello"," China!"));
}
}





匿名方法:匿名方法定义委托时与前面没有区别,只是在实例化时,就不同了.匿名方法的优点是减少了开销,方法仅在由委托使用时才定义.使用匿名方法要遵循的两个规则:1、在匿名方法中不能使用跳转语句跳到该匿名方法体外;2、反之,匿名方法体外的语句也不能跳转到匿名方法体内.例2.


public class MyClass
{
public static void Main()
{
{
return val1+val2;
Console.WriteLine(nonameT("Hello"," China"));
Console.ReadLine();
}
}





例3中,将委托的实例放在数组中是可以的.该数组的每一个元素都执行不同的操作,这样我们就可以在循环中调用不同方法了.例3.



public class MyClass
{
{
}
{
}
public delegate double MathCal(double val);
public static void Main()
{
for(int i = 0;i<uMath.Length;i++)
{
Console.WriteLine(uMath[i](4));
}
Console.ReadLine();
}
}





BubbleSorter示例冒泡算法



public class MyClass
{
public int[] Sort(int[] arr)
{
int[] array = arr;
for(int i = 0;i < array.Length -1;i++)
{
for(int j = i+1;j < array.Length;j++)
{
if(array[j]<array[i])
{
int temp = array[i];
array[i] = array[j];
array[j] = temp;
}
}
}
return array;
}
public static void Main()
{
MyClass mc = new MyClass();
int[] arr = {0,2,5,3,7,8};
arr = mc.Sort(arr);
for(int i=0;i<arr.Length;i++)
{
Console.Write(arr[i]);
}
Console.ReadLine();
}
}




自己写的一个委托例子,只是用来显示用法自总结:使用到委托函数的特点,看ShowFinded,它将参数1(一个类数组)传递进第二个(委托)参数(其实是方法)中进行处理.我感觉就是如果要在函数中处理函数,那需要使用到委托(就是回调,就是函数指针嘛)例4.


public class MyClass
{
public static int cnt = 0;

{
int showCnt = dFind(id,area);
Console.WriteLine(area+"人共有"+showCnt+"名.");
}

public int Find(object[] id,string area)
{
for(int i = 0; i < id.Length; i++)
{
if(((Identify)id[i]).area == area)
{
MyClass.cnt ++;
}
}
return MyClass.cnt;
}

public static void Main()
{
Identify[] id = new Identify[]{ new Identify("张三",22,"河北"),new Identify("李四",25,"江苏"),
new Identify("王五",20,"山东"),new Identify("小强",27,"江苏"),
new Identify("阿扁",23,"火星"),new Identify("布什",13,"火星") };
MyClass mc = new MyClass();
delegateFind dFind = new delegateFind(mc.Find);

}
}

public class Identify
{
public string name;
public int age;
public string area;

public Identify(string name,int age,string area)
{
this.name = name;
this.age = age;
this.area = area;
}
}





多播委托调用多播委托,就可以按顺序连续调用多个方法(注意,如果用于事件,则是无序的),为此,多播委托的返回值必然是void.例5.


public class MyClass
{
{
}
{
}
public static void Main()
{
MathCal mc = new MathCal(doubleCal);
mc(3);
Console.ReadLine();
}
}





猜你喜欢

转载自www.cnblogs.com/gladiolus/p/11009285.html
今日推荐