由于我们注册回调函数PrintOne两次,以下代码将两次打印消息“PrintOne”。这里有问题,C# - 如何处理重复的multicastdelegate?
问题1>为什么默认情况下operator + =(即Combine)不检查重复的方法处理程序?
问题2>如何避免方法RegisterCall中的这种重复调用?我尝试在MulticastDelegate/Delegate中找到一些方法,告诉我调用列表中已经有一个方法。但我没有找到它。 http://msdn.microsoft.com/en-us/library/system.multicastdelegate.aspx
谢谢
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace app3
{
class Car
{
public delegate void PrintMethod(string msg);
public string Name { get; set; }
private PrintMethod printMethods;
public Car() { }
public Car(string name) { Name = name; }
public void PrintCar()
{
if (printMethods != null)
{
printMethods(this.ToString());
}
else
{
Console.WriteLine("No Method will be called");
}
}
public override string ToString()
{
return string.Format("Car Name is {0}: ", Name);
}
public static void PrintOne(string msg)
{
Console.WriteLine("PrintOne");
}
public static void PrintTwo(string msg)
{
Console.WriteLine("PrintTwo");
}
public void RegisterCall(PrintMethod methodToCall)
{
printMethods += methodToCall;
}
}
class Program
{
static void Main(string[] args)
{
Car mycar = new Car { Name = "BMW" };
mycar.RegisterCall(new Car.PrintMethod(Car.PrintOne)); // **will print for the first time**
mycar.RegisterCall(new Car.PrintMethod(Car.PrintOne)); // **will print for the second time**
mycar.PrintCar();
Console.ReadLine();
}
}
}
我很快就会到达那里。刚开始学习C#。 – q0987 2011-05-11 20:51:42