1

我知道静态构造函数的概念。

静态构造函数用于初始化任何静态数据,或执行只需要执行一次的特定操作。在创建第一个实例或引用任何静态成员之前自动调用它。

我想知道为什么类只包含单个静态构造函数?静态构造函数的实时场景是什么?

它与私有构造函数有何不同?我用谷歌搜索了很多链接,但我无法得到好主意。

http://social.msdn.microsoft.com/Forums/en-US/a9f8dcca-32d1-4a2b-b3fe-7d8f34f3b3f1/c-programmingstatic-constructor

.Net 中的私有与静态构造函数

4

2 回答 2

3

我想知道为什么类只包含单个静态构造函数?

因为它是自动调用的,并且无法将任何参数传递给该构造函数。这就是为什么只有一个无参数的静态构造函数是可能的。

静态构造函数的实时场景是什么?

您应该将它用于在上课之前必须完成的任何工作,并且只需要完成一次。

它与私有构造函数有何不同?

当您希望私有构造函数运行时,它正在运行。静态构造函数在第一次使用之前由 CLR 运行class,您可以确定它何时发生。

静态构造函数使用的真实代码示例- 它创建一个表达式树并编译它以供以后使用,并且每次执行都TestFunction调用安全的表达式树编译:

class Test<T> where T : struct, IConvertible
{
    private static Func<int, T> _getInt;

    static Test()
    {
        var param = Expression.Parameter(typeof(int), "x");
        UnaryExpression body = Expression.Convert(param, typeof(T));
        _getInt = Expression.Lambda<Func<int, T>>(body, param).Compile();
    }

    public static T TestFunction(T x)
    {
        int n = Convert.ToInt32(x);
        T result = _getInt(n);
        return result;
    }
}

Convert类、IConvertible接口和泛型性能对比测试代码

于 2013-09-02T06:52:15.070 回答
0

如果你想比较静态构造函数和实例构造函数,你可以这样考虑。

实例构造函数用于实例化特定类的新实例(无论它是公共的、私有的还是受保护的)。

静态构造函数用于“初始化”整个类型。这就是为什么在创建第一个实例或引用任何静态成员之前自动调用静态构造函数的原因。从语义上讲,它只是类型初始化代码而不是构造函数(或者您可以将其视为类型构造函数)。

私有构造函数只是具有私有访问可见性的实例构造函数(因此您可以使用它在声明它的同一类中实例化新实例)。

于 2013-09-02T06:57:20.567 回答