千家信息网

什么是.net 委托

发表于:2024-11-14 作者:千家信息网编辑
千家信息网最后更新 2024年11月14日,本篇内容主要讲解"什么是.net 委托",感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习"什么是.net 委托"吧!最近手头的活,干的比较快,每天都有时间学习,
千家信息网最后更新 2024年11月14日什么是.net 委托

本篇内容主要讲解"什么是.net 委托",感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习"什么是.net 委托"吧!

最近手头的活,干的比较快,每天都有时间学习,这几天一直在看委托,做个总结,以后要是模糊了,看看能记起来,没搞懂使用委托的情景。

委托可以自定义,也可以使用内置委托

自定义委托:delegate T4 AllDeleate(T1 a, T2 b, T3 c);//是根据查看源码摸你写的委托

无返回值委托:

Action action = (a) =>
{
for (int i = 0; i < 10; i++)
{
Console.WriteLine(a + i);
}
};

有返回值委托:Func func = (a) => a + "你好";

只有一个参数返回布尔类型委托:

Predicate pre = (d) =>
{
int tag = 10;
bool bo = d > tag ? true : false;
return bo;
};

//根据源码编写委托

var dele = new AllDeleate(TestDeleage);
var str = dele("我是a", "我是b", "我是c");
Console.WriteLine(str);

public string TestDeleage(string a, string b, string c)
{
return "根据源码编写委托,并输出a:" + a + ",b:" + b + ",c:" + c;
}

//内置委托,并遍历委托输出
Func func = GetName;//声明委托并注册
func += (d) => d + "我是匿名委托";//注册
var deleteArray = func.GetInvocationList();//多路广播委托调用列表
foreach (Func item in deleteArray)
{
var mag = item("小李");
Console.WriteLine(mag);
}

private string GetName(string name)
{
Console.WriteLine("委托调用方法");
return name + "你好,欢迎使用委托";
}

//predicate委托
Predicate pre = (d) =>
{
int tag = 10;
bool bo = d > tag ? true : false;
return bo;
};
Console.WriteLine("predicate委托匿名函数:" + pre(10));

Predicate preTest = GetBool;
Console.WriteLine("predicate委托函数:" + GetBool(12));

private static bool GetBool(int num)

{

int tag = 10;

bool bo = num > tag ? true : false;

return bo;

}

//编写委托
var nums = TsetReturn("小明", GetName);
Console.WriteLine(nums);

public static T2 TsetReturn(T1 t, Func func)
{
Console.WriteLine("进入方法");
T2 num = func(t);
return num;
}

private static string GetName(string name)
{
Console.WriteLine("委托调用方法");
return name + "你好,欢迎使用委托";
}

//委托实际应用

public static void DiaoYongTest()
{
DelteateClass delteateClass = new DelteateClass();
delteateClass.td = new TestDeleate(delegate (int i, int maxValue)
{
Console.WriteLine("当前进度:" + i);
Console.WriteLine("最大值:" + maxValue);
});
delteateClass.td += new TestDeleate((a, b) =>
{
Console.WriteLine("Lambda当前进度:" + a);
Console.WriteLine("Lambda最大值:" + b);
});

delteateClass.td += new TestDeleate(GetProgress);

delteateClass.ApplyTest();
}

private static void GetProgress(int i, int maxValue)
{
Console.WriteLine("GetProgress当前进度:" + i);
Console.WriteLine("GetProgress最大值:" + maxValue);
}

class DelteateClass
{
public TestDeleate td;
public void ApplyTest()
{
int maxValue = 10;
var list = td.GetInvocationList();
foreach (var item in list)
{
for (int i = 0; i < maxValue; i++)
{
item?.DynamicInvoke(i, maxValue);
}
}
}
}

到此,相信大家对"什么是.net 委托"有了更深的了解,不妨来实际操作一番吧!这里是网站,更多相关内容可以进入相关频道进行查询,关注我们,继续学习!

0