1
我真的不知道我怎麼字要什麼,所以我就顯示,無法正常工作代碼:多態性泛型(或類似的東西)
abstract class EventListener<T> where T : IEvent
{
}
interface IEvent
{
}
/*
* Simplified a bit, normally this class would use a dictionary of event listeners
*/
class Manager
{
private EventListener<IEvent> listener;
public void RegisterListener<T>(EventListener<T> subject) where T : IEvent
{
// here is the issue
listener = subject;
}
}
/*
* Implementation
*/
class FooEvent : IEvent
{
}
class FooListener : EventListener<FooEvent>
{
}
當我嘗試時出現問題將subject
分配給listener
。我試圖在分配前投射,但有類似的問題:
EventListener<IEvent> casted = subject as EventListener<IEvent>;
events.Add(typeof(T), casted);
有沒有辦法使這項工作?
你可以在你的文章中添加'EventListener'和'Event'的成員嗎?另外,請爲接口名稱添加前綴(「IEvent」而不是「Event」)。 –
Dennis
@丹尼斯我已經確定了名字,但我認爲現在不需要添加成員,因爲問題已經解決。我試圖儘可能簡化這篇文章。 –