C#构造函数作为方法';谁的论点?

C#构造函数作为方法';谁的论点?,c#,C#,我对C#scripting还不熟悉 我正在阅读一些代码,在类方法中有一个对函数的调用,以添加到名为Listeners的字典实例中,如下所示: public class ...... { private Dictionary<string, List<Component>> Listeners = new Dictionary<string, List<Component>>(); public void AddL

我对C#scripting还不熟悉

我正在阅读一些代码,在类方法中有一个对函数的调用,以添加到名为Listeners的字典实例中,如下所示:

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
命名局部变量、形式参数和局部变量,而不是