我遇到了这个错误:
' 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;
});
}
}
显然,我的静态构造函数不是无参数的,编译器会对这个事实感到不满。但为什么呢?
答案 0 :(得分:5)
静态构造函数必须是无参数的,因为没有任何东西会调用它,当访问静态成员或创建类的实例时调用它,但不是直接调用它(它由运行时调用)。
解决方案:删除参数,或将其设为非静态
静态构造函数的引用:http://msdn.microsoft.com/en-us/library/k9x6w0hc.aspx
要使其成为非静态的(请注意,现在需要使用new
关键字直接调用它):
public KillstreakHud(Entity player)
{
...
}
答案 1 :(得分:0)
在我看来,这是语言的限制。静态是一次调用而不会改变的东西。没有理由(除了没有实现)为什么它不能接受参数,理解它只会使用参数值一次。 这种语言的限制是公共静态类ConfigurationManager&#34; 有人会问我可以使用不同的配置文件吗? 如果构造函数可以接受参数,那么这很容易 (但它不能,所以你必须自己配置)
答案 2 :(得分:0)
声明数据成员静态的主要目的是,该数据成员在类的所有实例中都应可用。在不同实例之间共享数据成员时,必须在该类的所有实例之间使数据保持一致。
而且也没有办法显式调用静态构造函数。 因此,使用参数化静态构造函数的目的没有用。
在以下情况下隐式调用静态构造函数: 1.引用了静态数据成员。 要么 2.创建包含静态构造函数的类的对象。