在我的应用程序启动时自动创建一个类

本文关键字:一个 创建 应用程序 我的 启动 | 更新日期: 2023-09-27 17:57:44

假设我有一个带有静态构造函数的MySingleton类。

我希望在我的应用程序启动时立即创建该单例

有没有一种方法可以做到这一点,而不必在应用程序启动时编写MySingleton.Instance.MyMethod。。。只是为了让singleton调用静态构造函数?我不太确定这是否可能,但我想把这个问题抛出去。

谢谢,

在我的应用程序启动时自动创建一个类

有没有一种方法可以在应用程序启动时自动创建类的实例。

是的。将创建逻辑放在一个静态构造函数中,然后将Main放在该类中。静态构造函数总是在类的任何方法之前调用,Main是类的一个方法。

如果不能将Main放在该类中,则不可以。静态构造函数将通过(1)调用该类上的任何静态方法,或(2)创建该类的实例来触发。

否,实例化只会根据初始成员访问的需要进行。

出于好奇,为什么你需要在需要它之前先实例化它?

从何时调用C#中的静态构造函数?:

静态构造函数由下列任一项中的第一项条件:

Create an instance of the class.
Refer any of the static methods of the class.

因此,如果您的构造函数既是静态的又是私有的,则必须引用其中一个方法。如果没有,您可以直接调用构造函数。

AFAIK,无法从加载的程序集中执行代码。调用程序集应通过从程序集中实例化类型或调用静态方法来引用此程序集。此外,还有一个Assembly Loaded事件,当加载某个程序集时,您可以使用它来执行代码,但如前所述,您只能从调用程序集(而不是正在加载的程序集)使用它。启动计时器最简单的方法可能是调用一个静态方法,就像其他人建议的那样。

只需调用Singleton上的任何方法,它就会被实例化。

如果您想直接调用静态构造函数,它实际上非常容易。

在您的主要方法中,输入以下代码:

RuntimeHelpers.RunClassConstructor(typeof(MySingleton).TypeHandle);

不过,这个方法意味着只能由编译器使用,所以可能有一些我不知道的注意事项-我只知道这个方法,因为我自己的编译器需要在特定时间运行类初始化程序。

注意:此方法遵循初始化规则,并确保初始化程序永远不会运行两次,等等。

您可以为此使用模块初始值设定项。很遗憾,这个CLR功能在C#中不可用。但是您可以使用像这样的后编译器。

相关文章: