考慮以下代碼:型專用靜態
public class Person
{
public string Name { get; set; }
}
public class Animal
{
public string Name { get; set; }
}
public interface IHandler<T>
{
T Handle(T eventData);
}
public class UpdatePersonHandler : IHandler<Person>
{
public Person Handle(Person eventData)
{
var test = eventData.Name;
return eventData;
}
}
public class UpdatePersonHandler2 : IHandler<Person>
{
public Person Handle(Person eventData)
{
var test = eventData.Name;
return eventData;
}
}
public class UpdateAnimalHandler : IHandler<Animal>
{
public Animal Handle(Animal eventData)
{
var test = eventData.Name;
return eventData;
}
}
public class Bus<T>
{
public static readonly IList<IHandler<T>> Handlers = new List<IHandler<T>>();
public static void Register(IHandler<T> handler)
{
if (handler != null)
Handlers.Add(handler);
}
public static void Raise(T eventData)
{
foreach (var handler in Handlers)
{
handler.Handle(eventData);
}
}
}
這個測試代碼:
[TestMethod]
public void TestRegister()
{
Bus<Person>.Register(new UpdatePersonHandler());
Bus<Person>.Register(new UpdatePersonHandler());
Bus<Person>.Register(new UpdatePersonHandler2());
Bus<Animal>.Register(new UpdateAnimalHandler());
Debug.Print(Bus<Person>.Handlers.Count.ToString());
Debug.Print(Bus<Animal>.Handlers.Count.ToString());
}
這個測試的輸出:
3
1
是什麼去這裏?
它看起來好像框架正在爲通過static
註冊方法呈現給它的每種類型新建一個總線類。爲此,它必須爲每個新類型調用Bus<T>
的默認構造函數。
但是爲什麼?這個怎麼用?
這是否有任何實際的用途,或者它只是一個有趣的,但令人遐想的C#應該在生產代碼中避免的好奇心?
對話[轉移到聊天](http://chat.stackoverflow.com/rooms/121216/discussion-between-robert-harvey-and-peter-duniho)。 –