是获取抽象类类型的派生类类型的任何方法

我想创建一个数据类,它将包含一些信息,并提供一个来处理该信息的数据类。event


public abstract class EventData<T> where T : EventData<T>

{

    Action<T> action_;

    public void Subscribe(Action<T> _actor) { action_ += _actor; }

    public void Unsubscribe(Action<T> _actor) { action_ -= _actor; }

    public void Dispatch(T _data) { if (action_ != null) action_(_data); }

}


public class ConcreteEventData : EventData<ConcreteEventData>

{

    int arg1;

    string arg2;

}

因此,我被迫使用这种不舒服的结构,而不是简单和简短,即使我记住我会使用与我描述的相同的类型。此外,如果有人使用该基类,他可能会写如下内容:ConcreteEventData : EventData<ConcreteEventData>ConcreteEventData : EventData


public class AnotherConcreteEventData : EventData<ConcreteEventData>

{

    float arg1;

    bool arg2;

}

如您所见,这不是使用该想法的好方法,是否有另一种方法可以更优雅地使用它?


泛舟湖上清波郎朗
浏览 92回答 1
1回答

慕仙森

好的,解决方案很简单。而不是为我的“事件”创建一个类,我可以简单地用作数据类,不需要任何事件。我的目标是将其用于EventBus,而不是做这样的事情EventArgspublic abstract class EventData<T> where T : EventData<T>&nbsp; &nbsp; {&nbsp; &nbsp; &nbsp; &nbsp; Action<T> action_;&nbsp; &nbsp; &nbsp; &nbsp; public void Subscribe(Action<T> _actor) { action_ += _actor; }&nbsp; &nbsp; &nbsp; &nbsp; public void Unsubscribe(Action<T> _actor) { action_ -= _actor; }&nbsp; &nbsp; &nbsp; &nbsp; public void Dispatch(T _data) { if (action_ != null) action_(_data); }&nbsp; &nbsp; }&nbsp; &nbsp; public class EventBus&nbsp; &nbsp; {&nbsp; &nbsp; &nbsp; &nbsp; static Dictionary<string, EventData> _dict;&nbsp; &nbsp; }(此外,我不能这样做,我也可能被迫找到这个问题的解决方案)我可以简单地使用public class EventBus<T> where T : EventArgs&nbsp; &nbsp; {&nbsp; &nbsp; &nbsp; &nbsp; static Dictionary<string, Action<T>> list;&nbsp; &nbsp; &nbsp; &nbsp; public static void SubscribeOnEvent(string _sid, Action<T> _method)&nbsp; &nbsp; &nbsp; &nbsp; {&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; // Do Stuff...&nbsp; &nbsp; &nbsp; &nbsp; }&nbsp; &nbsp; }并以如下方式使用它EventBus<MyData>.Subscibe("myID", (data) => { /*Do stuff...*/ });现在我可以使用所有数据,来自.感谢@JeroenMostert的想法。EventArgs
打开App,查看更多内容
随时随地看视频慕课网APP