【问题标题】:Shared (static) classes with events in C#C# 中带有事件的共享(静态)类
【发布时间】:2025-12-15 21:00:02
【问题描述】:

这是我将在 Visual Basic 中执行的示例:

Public Class Class1
    Public Shared WithEvents Something As New EventClass

    Public Shared Sub DoStuff() Handles Something.Test

    End Sub
End Class

Public Class EventClass
    Public Event Test()
End Class

如何在 C# 中做到这一点?

我知道 C# 中没有 Handles 子句,所以我需要一些被调用的函数并在那里分配事件处理程序。但是,由于它是一个共享类,所以没有构造函数;我必须把它放在函数之外的某个地方。

如何实现?

【问题讨论】:

    标签: c# .net vb.net static


    【解决方案1】:

    你可以使用静态构造函数...

    static readonly EventClass _something;
    
    static Class1()
    {
      _something = new EventClass();
      _something.Test += DoStuff;
    }
    
    static void DoStuff()
    {
    }
    

    【讨论】:

    • 请记住,静态构造函数不会像在 c/c++ 中那样在程序启动时自动调用。当您在代码中第一次访问静态类时调用它们,所有静态成员变量也是如此。
    【解决方案2】:

    试试下面的

    public static class Class1 {
      private static EventClass something;
      public static EventClass Something {
        get { return something; }
      }
      static Class1 {
        something = new Class1();
        something.Test += DoStuff;
      }
    
      public static void DoStuff() {
        ...
      }
    }
    

    【讨论】: