我现在通过这个视频了解了代表:https://www.youtube.com/watch?v=0nd-tcQcslc&list=PLdbkZkVDyKZVvizO94tJNmTfRzXWGDFZ3&index=2
当他谈到代表时,跟随他作为初学者是非常困惑的,因为他确实将这个词用于两个不同的事情。
他确实将它用于例如Func<T, ..., Tresult>
//他确实称这个代表为
delegate(Person p) { return p.ToString(); }
//他也将此称为代理人(匿名代表)
谈论代表的正确方法是什么? 我很确定第二个叫做anonymus函数/方法,委托关键字是ony语法,我也认为第一个应该在委托代表谈论委托时引用。
答案 0 :(得分:0)
Func<T>
及其通用的“重载”最准确地说是通用命名委托类型。它们本身并不是“匿名”,但它们可以从与委托类型的方法签名(参数的数量和类型以及返回类型)匹配的匿名委托中分配。 Func
,Action
,Comparison
,Predicate
等类型被命名为委托类型,就像您自己声明的任何自定义委托类型一样,例如对于事件处理程序。< / p>
至少在开始时,区分“委托”和“委托类型”非常重要。委托类型是委托代表在讨论代码中的“对象”时类的实例。类型是定义,实际委托是委托类型的特定实例。
语法delegate(int a){...}
是“匿名委托”的原始语法,也就是“函数文字”,在看起来更干净的“lambda语句”(a => ...
)成为事物之前。 Lambda语句是匿名委托的一种形式,两种格式是1:1可互换的。这些中的任何一个,以及任何命名方法,也可以被指定为“命名委托”的实例,这是C#指定“函数变量”的原始方式,这是委托在C#中实现的基本概念。 / p>
答案 1 :(得分:0)
谈论代表的正确方法是什么?
可以说,可能是一个意见问题。但是,C#规范很明确:
System.Delegate
声明的类型的实例,继承了基类 client.on("joinRoom", function(id) {
var room = rooms[id];
if (client.id === room.owner) {
client.emit("update", "You are the owner of this room and you have already been joined.");
} else {
room.people.contains(client.id, function(found) {
if (found) {
client.emit("update", "You have already joined this room.");
} else {
if (people[client.id].inroom !== null) { //make sure that one person joins one room at a time
console.log("User is already in a room");
client.emit("update", "You are already in a room ("+rooms[people[client.id].inroom].name+"), please leave it first to join another room.");
} else {
room.addPerson(client.id);
people[client.id].inroom = id;
client.room = room.name;
client.join(client.room); //add person to the room
user = people[client.id];
socket.sockets.in(client.room).emit("update", user.name + " has connected to " + room.name + " room.");
client.emit("update", "Welcome to " + room.name + ".");
client.emit("sendRoomID", {id: id});
}
}
});
}
});
。来自C#5语言规范:
委托类型表示对具有特定参数列表和返回类型的方法的引用。委托使得可以将方法视为可以分配给变量并作为参数传递的实体。委托类似于在其他一些语言中找到的函数指针的概念,但与函数指针不同,委托是面向对象的,类型安全的。
请注意,在其他语言(例如Objective-C)的上下文中,术语“委托”具有更常规的含义,与C#上下文中的精确用法略有不同。当然,即使在C#的上下文中,您也会发现人们使用不精确的术语来描述例如委托实例的目标方法,而不是委托实例本身。