多播委托是否为每个链接创建新的引用?或它的值类型(MSDN则相反)?我不明白,请看下面的代码。
String input = "1 + (1 + 2 + (1 + 2 + (1 + 2) ) )";
String regexp = "(\\()(.*)(\\))";
Pattern pattern = Pattern.compile(regexp);
Matcher matcher = pattern.matcher(input);
while(matcher.find()) {
System.out.println(matcher.group(2));
}
答案 0 :(得分:2)
代表是一成不变的......
添加新的处理程序时,将创建一个新的 delegate 。
在引擎盖下它称为Delegate.Combine Method
连接两个委托的调用列表。
返回
带有调用列表的新委托,该委托列表将 依次列出a和b的调用列表。如果b为null,则返回a, 如果a为空引用,则返回b;如果a为空引用,则返回null a和b都是空引用。
您可以在操作中here
看到它Action action = <>c.<>9__0_0 ?? (<>c.<>9__0_0 = new Action(<>c.<>9.<M>b__0_0));
Action action2 = action;
action = (Action)Delegate.Combine(action, <>c.<>9__0_1 ?? (<>c.<>9__0_1 = new Action(<>c.<>9.<M>b__0_1)));
action2();
Console.ReadKey();
答案 1 :(得分:1)
因为它是不可变的类型,所以每次分配都会创建一个从原始实例复制的新实例。请注意,它仍然是引用类型,只是特殊类型。