নেট প্রোগ্রামের মডেলটি সম্পর্কে আমার বোঝার সাথে আমি মোটামুটি খুশি। আমি মনে করি আমি সম্ভবত সিস্টেমের একটি সামান্য উপকারের ভুল বোঝাবুঝি করছি।
যখন আমি আমার ক্লাসগুলিতে ইভেন্টগুলি স্থাপন শুরু করি তখন আমি প্রমিতের মতো এভাবে ব্যবহার করতাম:
public event EventHandler<MyEventArgs> MyEvent;
এর অর্থ হ'ল ইভেন্টটি সাবস্ক্রাইব করার জন্য যে কোনও পদ্ধতির প্রয়োজন হবে:
void HandleThatEvent(object sender, MyEventArgs args){...}
যা দুর্দান্ত, তবে আমি দেখেছি যে আমি প্রেরকের খুব কমই যত্ন করব, তাই এটি প্রচুর পদ্ধতিতে স্বাক্ষরগুলি ফুলে উঠেছে।
তাই আমি আমার নিজস্ব প্রতিনিধি প্রকারগুলি ঘোষণা করতে চলেছি
public delegate void MyEventHandler(SomeClass argument);
যা বিশৃঙ্খলা কেটে ফেলেছিল, তবে হ্যান্ডলারের লেখার কথা এলে আমাকে একটি ছোট সমস্যা দিয়ে ফেলেছিল:
eventImplmentor.MyEvent += HandleThatEvent;
.
.
.
void HandleThatEvent(/*oh, um, what arguments does it take? Intellisense isn't telling me*/)
সুতরাং আমাকে ডেলিগেটের ঘোষণায় ফিরে যেতে হবে এবং তাকাতে হবে এবং তারপরে ফিরে গিয়ে সেগুলিতে লিখতে হবে, বা এটি সঙ্কলন করতে হবে এবং বলার অপেক্ষা রাখে।
সুতরাং এখন পরিবর্তে, আমি কেবল ব্যবহার করছি Action, Action<T>বা যা টেম্পলেট ফিট করে fits
public event Action<SomeClass> MyEvent;
যাতে আমি ইভেন্টটি নিয়ে ঘুরে বেড়াতে পারি এবং এটি কী পরামিতিগুলি প্রত্যাশা করে তা বলা যেতে পারে।
আমার প্রশ্ন, সর্বোপরি: সি # তে ইভেন্ট ঘোষণার জন্য কি সেরা অনুশীলন রয়েছে? আমি কি আবার ফিরে যাই EventHandler<T>, নাকি Action<T>গ্রহণযোগ্য?