委托C#详解

本文最后更新于:6 months ago

delegate代表,可以理解成,函数指针,方法的家庭地址,可以通过它找到方法,指代方法,我们要找一个人做核酸,就像程序要调用一个方法,我们不知道这个人的名字,那么我们去他的家庭住址找他,拿着大喇叭喊:402的住户做核酸了吗?如果知道名字我们就喊:熊大你做核酸了吗?402就是地址啦!熟悉C语言的同学们听说过一切皆地址吧。402就像一个delegate,有了他,就可以叫住在402的熊大或者熊二下来做核酸了!

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
//声明
//1.
public delegate void Entrust1(string name);
//2.
public delegate string Entrust(string name);
//实例化
//1.
Entrust1 et1=new Entrust1(show1);

public static void show1(string name){
Console.WriteLine($"您好,{name}");
}
//2.
Entrust2 et2=new Entrust2(show2);

public string show2(string name){
return "你好,"+name;
}
//调用
et1.invoke("mengwei");
et2.invoke("mengwei");

委托这个翻译,我真的不喜欢!虽然一开始我还真的努力理解过,就像是别人委托你去哄一哄他家小孩,你可以拿玩具和小孩玩,这是一种方法,也可以给小孩讲故事,这又是一种方法,委托没有指定哪种方法,但就是委托给你了,你看着办!这个真是为了理解还要瞎编/_\
多播委托一个方法指针指向了多个方法。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
class Program
{
//定义购买商品委托
public delegate void OrderDelegate();
static void Main(string[] args)
{
//实例化委托
OrderDelegate orderDelegate = new OrderDelegate(Order.BuyFood);
//向委托中注册方法
orderDelegate += Order.BuyCake;
orderDelegate += Order.BuyFlower;
//调用委托
orderDelegate();
}
}
class Order
{
public static void BuyFood()
{
Console.WriteLine("购买快餐!");
}
public static void BuyCake()
{
Console.WriteLine("购买蛋糕!");
}
public static void BuyFlower()
{
Console.WriteLine("购买鲜花!");
}
}

接口这个翻译我也不喜欢!哼,本少女就是这么傲娇,虽然我觉得他比委托翻译的好一点了,interface,首先,face翻译不出来就是不行!face可以理解成脸面,我们人的脸是被皮肤藏起来的,只露出了七窍,不然,如果,嘿嘿,那就是画皮最恐怖的一幕了,所以,接口就是给了这么几个孔,里面的血淋淋的组织器官都被封装起来,我们表面只是呼吸或者用眼观察,其实内部神经系统,内分泌系统,呼吸系统是非常复杂的生理反应机制。而且每个人继承了眼睛这一接口,但有人就是狗眼看人低,有人的眼睛会温暖别人,是心灵的窗口,接口实现的方式是不一样的。
我觉得叫interface门面不错,我记得有个人说得特别好,interface接口就像是麦当劳肯德基一类的招牌,挂了麦当劳的门面的店(就像实现了接口的类),会有一些固定的方法的实现,比如里面一般会有汉堡和可乐。(手动鼓掌呱唧呱唧,不是为了汉堡和可乐(哈哈哈),是这个人说得很好!)

今天吐槽一下,为什么技术博客有人评论直接会说兄台,××兄怎么怎么地,那次我都被叫兄台了!气死本美少女了,追星追剧视频下面叫男生叫成姐妹,这种情况我也遇到过,为啥默认有这种有脑子的就是男生,没脑子的就是女生偏见呢?从小到大多少男生不及我的努力和天赋,却总是洋洋得意,听信周围人说男生有后劲,等以后就好了,我想说,所有人都是有后劲的,但那不是我们现在躺平的理由,没有船到桥头自然直的美事。这种偏见让有些男生洋洋得意,一些女生自暴自弃,为什么你们愿意相信别人对你未来的“掐指一算”,却不相信自己有逆天改命的能力呢?

刘铁猛C

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
class Program
{
static void Main(string[] args)
{
ProductFactory productFactory = new ProductFactory();
Wrapfactory wrapfactory = new Wrapfactory();
Box box = new Box();
Func<Product> func1 = new Func<Product>(productFactory.MakePizza);//func的委托里的方法:返回值是Product类型的方法
Func<Product> func2 = new Func<Product>(productFactory.MakeToyCar);
box = wrapfactory.WrapProduct(func1);
Console.WriteLine(box.Product.Name);
}
}
class Product
{
public string Name { get; set; }
}
class Box
{
public Product Product { get; set; }//箱子的属性是由它装的产品定的
}
class Wrapfactory
{
public Box WrapProduct(Func<Product> getProduct)//getProduct委托成了一个参数传进了WrapProduct方法
{
Box box = new Box();
Product product = getProduct.Invoke();
box.Product = product;
return box;
}
}
class ProductFactory
{
public Product MakePizza()
{
Product product = new Product();
product.Name = "Pizza";
return product;
}
public Product MakeToyCar()
{
Product product = new Product();
product.Name = "ToyCar";
return product;
}
}