সি # 6 থেকে, আপনি কেবল ব্যবহার করতে পারেন:
MyEvent?.Invoke();
বা:
obj?.SomeMethod();
?.
নাল-প্রচারের অপারেটর, এবং কারণ হবে .Invoke()
স্বল্প circuited করা যখন প্রতীক হয় null
। অপারেন্ডটি কেবল একবার অ্যাক্সেস করা যায়, সুতরাং "চেক এবং অনুরোধের মধ্যে মান পরিবর্তন" হওয়ার ঝুঁকি নেই।
===
সি # 6 এর পূর্বে, না: কোনও ব্যতিক্রম ছাড়া নাল-নিরাপদ যাদু নেই; এক্সটেনশন পদ্ধতি - উদাহরণস্বরূপ:
public static void SafeInvoke(this Action action) {
if(action != null) action();
}
এখন এটি বৈধ:
Action act = null;
act.SafeInvoke();
act = delegate {Console.WriteLine("hi");}
act.SafeInvoke();
ইভেন্টগুলির ক্ষেত্রে, রেস-কন্ডিশনটি সরিয়ে ফেলার এটির সুবিধাও রয়েছে, অর্থাত্ আপনার অস্থায়ী পরিবর্তনশীল প্রয়োজন হবে না। তাই সাধারণত আপনার প্রয়োজন:
var handler = SomeEvent;
if(handler != null) handler(this, EventArgs.Empty);
কিন্তু সঙ্গে:
public static void SafeInvoke(this EventHandler handler, object sender) {
if(handler != null) handler(sender, EventArgs.Empty);
}
আমরা সহজভাবে ব্যবহার করতে পারি:
SomeEvent.SafeInvoke(this);