C#不可在類外觸發類裡面的靜態事件

stweily發表於2024-07-23
起初是這樣
using System;

namespace MyNamespace
{
    public class VCS 
    {
        public static event Action<string> InviteToJoinMeetEvent; 
        
        // 用於測試的主方法
        public static void Main()
        {
            // 訂閱事件
            InviteToJoinMeetEvent += HandleInviteToJoinMeetEvent;

            // 例項化並呼叫觸發方法
            SomeOtherClass obj = new SomeOtherClass();
            obj.SomeMethod();
        }

        // 事件處理程式
        private static void HandleInviteToJoinMeetEvent(string message)
        {
            Console.WriteLine("Event Invoked with message: " + message);
        }
    }

    public class SomeOtherClass 
    {
        public void SomeMethod() 
        {
            // 檢查事件是否為空,並觸發事件
            VCS.InviteToJoinMeetEvent?.Invoke("Your Message Here");
        }
    }
}

想著 直接

 VCS.InviteToJoinMeetEvent?.Invoke("Your Message Here");
結果。。。不行,提示不可以??? 平時還真沒注意這個 那想想肯定是保護事件的觸發由它自己來控制,不要使用外面的人來,這樣就有比較安全的一種保護,,嗯。。哼。。很好
突然有一個問題? 語法上 是如何做到的呢?
GPT一下
在 C# 中,不能直接從外部觸發靜態事件是因為事件背後有一個私有的委託欄位。
這個欄位只能在事件宣告的類內部訪問,以確保封裝性和安全性。
事件的設計是為了讓外部程式碼可以訂閱和取消訂閱事件,但不允許外部程式碼直接觸發事件。
這種設計可以防止意外或惡意的事件觸發,從而保證事件的使用更加安全和可靠。

這是理解上的。那麼從C#語法上 到底如何實現?先記上,有時間了再更新



相關文章