2011-07-21 44 views
19

按照MSDN:为什么一个静态构造没有任何参数

静态构造函数并不需要访问修饰符或有参数。

静态构造被自动调用创建或任何静态成员引用的第一个实例之前初始化该类。

无法直接调用静态构造函数。

任何人都可以请解释为什么静态构造函数不能有参数。

+4

因为你不能直接调用它(根据MSDN) –

+2

@Hightechrider在技术上你不能*调用*正则构造函数。表达式new Foo(x)不是对构造函数的显式调用,而是从'new'返回的内存上调用构造函数。 – Motti

+0

[将静态参数传递给一个类]可能的重复(http://stackoverflow.com/questions/2767017/passing-static-parameters-to-a-class) – nawfal

回答

24

正如MSDN说,静态构造函数是自动调用创建第一个实例之前初始化类。因此你不能发送任何参数。

如果CLR必须调用静态构造函数将如何知道哪些参数传递给它?

4

因为你不能直接调用它(根据MSDN):

静态构造函数不能直接调用。

8

静态构造为类型初始化的一部分自动调用。它们没有被明确地调用......所以你无法提供任何参数来对应构造函数参数。如果你永远不能为参数指定任何值,为什么你要允许参数?

8

你会如何控制考虑到它在类被首次引用会自动被运行时调用,并且不能直接调用传递给这样一个构造函数,参数,?

从理论上讲,这样的语法可能已经制定并实施的,但那么这将需要其直接调用,因为现在是一个简单的类引用不知道在什么作为参数传递给它。静态构造函数的要点是在使用类型之前执行类型级初始化。这样做会自动确保情况如此,而直接调用会留下充足的错误空间。

2

静态构造函数不能有任何参数。好吧,我想理论上可以 - 但没有这个类的实例,所以它没有任何意义。如果你有这些参数,你会怎么做?调用其他静态方法?

+0

设置私有静态变量,当然。 –

0
  • 静态构造函数在创建类的第一个实例 之前自动调用。
  • 通过在构造函数定义中加上静态关键字前缀声明。
  • 它不能访问修饰符或有任何参数。
0

为静态类创建一个空构造函数,并将参数化代码放到一个普通函数中。如果你调用这个函数,静态类将被创建。

静态类:

static class DataB 
{ 
    static DataB(){} 

    public static void funcWithParams(string st) 
    {...} 
} 

可以这样创建:

DataB.funcWithParams("some string"); 
-1

这里是用于允许嵌套类访问的表单控件而不通过窗体作为一个方法的一个例子参数到嵌套类的建设者:

public partial class Form1 : Form 
{ 
    public int nWow; 

    public Form1() 
    { 
     InitializeComponent(); 
     Inner.AssignMe(this); // This is where the real action is. 
    } 

    class Inner 
    { 
     static Form1 Me; 

     static Inner(){} // empty static constructor necessary 

      // Called AssignMe in the Form1 constructor in this code, 
      // but this can be generalized to any nested class. 
     public static void AssignMe(Form1 form) { Me = form; } 

     public Inner() { Me.nWow = 1; } // Now u can access public Form1 
    }      // members and methods even from the nested 
}       // class' constructor. 

我想出了基于o上面的user3567816的消息,虽然简洁并且拥有0票,但永远不会是迄今为止最优雅的解决方案,也是非常独特的解决方案。没有人会对这种问题给出这样的建议。在嵌套类的构造器中不再需要可重用的冗余形式参数!这绝对是辉煌!

我忍不住给VB.Net使用静态变量名称Me扭曲。傻笑。

0

静态构造函数

因为静态构造函数自动调用(我们没有在静态构造函数调用的任何控制),这就是为什么我们不能参数传递给静态构造函数。

如果我们无法将参数传递给静态构造函数,那么为什么我们将创建静态构造函数作为参数化。

所以,我们必须有参数少的静态构造函数。

相关问题