C#构造函数作为方法';谁的论点?
我对C#scripting还不熟悉 我正在阅读一些代码,在类方法中有一个对函数的调用,以添加到名为Listeners的字典实例中,如下所示:C#构造函数作为方法';谁的论点?,c#,C#,我对C#scripting还不熟悉 我正在阅读一些代码,在类方法中有一个对函数的调用,以添加到名为Listeners的字典实例中,如下所示: public class ...... { private Dictionary<string, List<Component>> Listeners = new Dictionary<string, List<Component>>(); public void AddL
public class ......
{
private Dictionary<string, List<Component>> Listeners =
new Dictionary<string, List<Component>>();
public void AddListener(Component Listener, string NotificationName)
{
// Add listener to dictionary
if (!Listeners.ContainsKey(NotificationName))
Listeners.Add (NotificationName, new List<Component>());
// Add object to listener list for this notification
Listeners[NotificationName].Add(Listener);
}
}
公共类。。。。。。
{
专用字典侦听器=
新字典();
public void AddListener(组件侦听器、字符串通知名)
{
//将侦听器添加到字典
if(!Listeners.ContainsKey(NotificationName))
Add(NotificationName,newlist());
//将对象添加到此通知的侦听器列表
侦听器[NotificationName]。添加(侦听器);
}
}
现在,对Listeners.Add的调用似乎有一个构造函数调用
new List<Component>()
新列表()
作为论据
我说得对吗 否,调用获取
列表的新实例作为参数
与方法不同,构造函数不能真正被引用。虽然可以将方法引用存储在委托中,然后再调用它,但不能对构造函数执行同样的操作。虽然这在这里或多或少是没有意义的,因为
Listeners.Add (NotificationName, new List<Component>());
Listeners.Add(NotificationName,newlist());
大致指以下各项:
var param1 = NotificationName;
var param2 = new List<Component>();
Listeners.Add(param1, param2);
var param1=NotificationName;
var param2=新列表();
Add(param1,param2);
如您所见,将创建一个新列表,并将该新列表传递给Add
方法。否,调用将获取list
的新实例作为参数
与方法不同,构造函数不能真正被引用。虽然可以将方法引用存储在委托中,然后再调用它,但不能对构造函数执行同样的操作。虽然这在这里或多或少是没有意义的,因为
Listeners.Add (NotificationName, new List<Component>());
Listeners.Add(NotificationName,newlist());
大致指以下各项:
var param1 = NotificationName;
var param2 = new List<Component>();
Listeners.Add(param1, param2);
var param1=NotificationName;
var param2=新列表();
Add(param1,param2);
如您所见,将创建一个新列表,并将该新列表传递给Add
方法
现在,似乎调用了侦听器。添加
你的意思是不是调用监听器[NotificationName]。我猜是添加
。。。将构造函数调用new List()
作为参数。我说得对吗
是的,调用有两个参数。第一个参数是当前方法的形式参数,第二个参数是对象创建表达式。运行时这些参数的值将是对字符串的引用和对新创建对象的引用
这里的操作顺序是,首先计算接收方,然后生成这些参数值,然后调用Add
方法,将这些值复制到其形式参数中,并将接收方值用作this
代码的意思是“我有一个从名称到内容列表的映射;如果这个映射没有特定名称的映射,那么创建一个从名称到内容空列表的映射”。然后,第二个Add
调用将一个元素添加到该内容列表中
根据对另一个答案的评论:
我无法获得该函数调用之外的实例引用
好吧,在下一行,你可以通过从地图上再读一遍来掌握它。但是,如果没有一个设备允许您通过计算另一个表达式来获得该值,就像您在这里所做的那样,那么您是正确的。这个表达式只是产生一个值;它不会将您以后可以使用的任何名称与之关联。如果您想这样做,那么您需要创建一个局部变量
现在,似乎调用了侦听器。添加
你的意思是不是调用监听器[NotificationName]。我猜是添加
。。。将构造函数调用new List()
作为参数。我说得对吗
是的,调用有两个参数。第一个参数是当前方法的形式参数,第二个参数是对象创建表达式。运行时这些参数的值将是对字符串的引用和对新创建对象的引用
这里的操作顺序是,首先计算接收方,然后生成这些参数值,然后调用Add
方法,将这些值复制到其形式参数中,并将接收方值用作this
代码的意思是“我有一个从名称到内容列表的映射;如果这个映射没有特定名称的映射,那么创建一个从名称到内容空列表的映射”。然后,第二个Add
调用将一个元素添加到该内容列表中
根据对另一个答案的评论:
我无法获得该函数调用之外的实例引用
好吧,在下一行,你可以通过从地图上再读一遍来掌握它。但是,如果没有一个设备允许您通过计算另一个表达式来获得该值,就像您在这里所做的那样,那么您是正确的。这个表达式只是产生一个值;它不会将您以后可以使用的任何名称与之关联。如果您想这样做,那么您需要创建一个局部变量。嗯,new List()是一个构造函数调用,对吗?然后该调用生成一个实例,该实例作为函数参数传递。但是在第一种情况下,我无法在该函数调用之外获得实例引用?然后该调用生成一个实例,该实例作为函数参数传递。但在第一种情况下,我无法得到函数调用之外的实例引用。有几件事可以让你的生活更轻松。首先,方法声明中缺少一个逗号,对吗?其次,使用camelCaseConvention
命名局部变量、形式参数和局部变量,而不是