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

时间:2014-05-29 18:18:27

标签: c#

我遇到了这个错误:

  

' 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;
      });
   }
}

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

3 个答案:

答案 0 :(得分:5)

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

解决方案:删除参数,或将其设为非静态

静态构造函数的引用:http://msdn.microsoft.com/en-us/library/k9x6w0hc.aspx

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

public KillstreakHud(Entity player)
{
   ...
}

答案 1 :(得分:0)

在我看来,这是语言的限制。静态是一次调用而不会改变的东西。没有理由(除了没有实现)为什么它不能接受参数,理解它只会使用参数值一次。 这种语言的限制是公共静态类ConfigurationManager&#34; 有人会问我可以使用不同的配置文件吗? 如果构造函数可以接受参数,那么这很容易 (但它不能,所以你必须自己配置)

答案 2 :(得分:0)

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

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

在以下情况下隐式调用静态构造函数: 1.引用了静态数据成员。 要么 2.创建包含静态构造函数的类的对象。

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