亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

是獲取抽象類類型的派生類類型的任何方法

是獲取抽象類類型的派生類類型的任何方法

C#
泛舟湖上清波郎朗 2022-08-20 16:03:57
我想創建一個數據類,它將包含一些信息,并提供一個來處理該信息的數據類。eventpublic 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 : EventDatapublic class AnotherConcreteEventData : EventData<ConcreteEventData>{    float arg1;    bool arg2;}如您所見,這不是使用該想法的好方法,是否有另一種方法可以更優雅地使用它?
查看完整描述

1 回答

?
慕仙森

TA貢獻1827條經驗 獲得超8個贊

好的,解決方案很簡單。而不是為我的“事件”創建一個類,我可以簡單地用作數據類,不需要任何事件。我的目標是將其用于EventBus,而不是做這樣的事情EventArgs


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 EventBus

    {

        static Dictionary<string, EventData> _dict;

    }

(此外,我不能這樣做,我也可能被迫找到這個問題的解決方案)我可以簡單地使用


public class EventBus<T> where T : EventArgs

    {

        static Dictionary<string, Action<T>> list;


        public static void SubscribeOnEvent(string _sid, Action<T> _method)

        {

            // Do Stuff...

        }

    }

并以如下方式使用它


EventBus<MyData>.Subscibe("myID", (data) => { /*Do stuff...*/ });

現在我可以使用所有數據,來自.感謝@JeroenMostert的想法。EventArgs


查看完整回答
反對 回復 2022-08-20
  • 1 回答
  • 0 關注
  • 107 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號