为什么静态构造函数必须是无参数的?

本文关键字:参数 静态 构造函数 为什么 | 更新日期: 2023-09-27 18:05:52

我遇到了这个错误:

'LnkScript.LnkScript. killstreakhud . killstreakhud (InfinityScript.Entity)':静态构造函数必须是无参数的C:'Users'home'Desktop'LnkScripts.cs 61 20 LnkScript

源代码:

public class KillstreakHud : BaseScript
{
   static KillstreakHud(Entity player)
   {
      string killstreak = "^3Killstreak:^3" + player.GetField<int>("killstreak").ToString();
      HudElem hudelem = HudElem.CreateFontString(player, "hudsmall", 1f);
      HudElem.SetPoint("TOPCENTER", "TOPCENTER");
      HudElem.SetText(killstreak);
      base.OnInterval(300, delegate
      {
         killstreak = "^3Killstreak:^3" + player.GetField<int>("killstreak").ToString();
         hudelem.SetText(Killstreak);
         return true;
      });
   }
}

显然,我的静态构造函数不是无参数的,编译器对这个事实很生气。但是为什么呢?

为什么静态构造函数必须是无参数的?

静态构造函数必须是无参数的,因为没有任何东西调用它,当您访问静态成员或创建类的实例时调用它,但不是直接调用(它由运行时调用)。

解决方案:删除你的参数,或者使其非静态

静态构造函数参考:http://msdn.microsoft.com/en-us/library/k9x6w0hc.aspx

要使其非静态(请注意,现在需要使用new关键字直接调用它):

public KillstreakHud(Entity player)
{
   ...
}

我认为这是语言的限制。静态是被调用一次并且不会改变的东西。没有理由(除了没有实现)为什么它不能接受一个只使用一次参数值的参数。这种语言的限制导致了"公共静态类ConfigurationManager"的混乱。有很多人问我可以使用不同的配置文件吗?如果构造函数可以接受参数,那么这就很容易了(但它不能,所以你必须自己配置)

声明静态数据成员的主要目的是它应该在类的所有实例中可用。当数据成员在不同的实例之间共享时,数据在类的所有实例之间必须保持一致。

也没有办法显式调用静态构造函数。因此,参数化静态构造函数的目的是无用的。

静态构造函数在:-时隐式调用1. 引用静态数据成员。或2.创建包含静态构造函数的类的对象。

访问https://learn.microsoft.com/en-us/dotnet/csharp/programming-guide/classes-and-structs/static-constructors