C# C的静态构造函数的实时示例#
我知道静态构造函数的概念 静态构造函数用于初始化任何静态数据,或执行只需执行一次的特定操作。在创建第一个实例或引用任何静态成员之前,会自动调用它 我想知道为什么这个类只包含一个静态构造函数?静态构造函数的实时场景是什么 它与私有构造函数有何不同?我在谷歌上搜索了很多链接,但我找不到好主意 我想知道为什么这个类只包含一个静态构造函数 因为它是自动调用的,并且无法将任何参数传递给该构造函数。这就是为什么只有一个无参数静态构造函数是可能的 静态构造函数的实时场景是什么 你应该把它用于任何在上课前必须完成的工作,而且只需要做一次 它与私有构造函数有何不同 私有构造函数正在您希望它运行时运行。静态构造函数在第一次使用C# C的静态构造函数的实时示例#,c#,C#,我知道静态构造函数的概念 静态构造函数用于初始化任何静态数据,或执行只需执行一次的特定操作。在创建第一个实例或引用任何静态成员之前,会自动调用它 我想知道为什么这个类只包含一个静态构造函数?静态构造函数的实时场景是什么 它与私有构造函数有何不同?我在谷歌上搜索了很多链接,但我找不到好主意 我想知道为什么这个类只包含一个静态构造函数 因为它是自动调用的,并且无法将任何参数传递给该构造函数。这就是为什么只有一个无参数静态构造函数是可能的 静态构造函数的实时场景是什么 你应该把它用于任何在上课前必
类之前由CLR运行,您可以确定何时发生
和静态构造函数用法的真实代码示例-它创建一个表达式树并编译它以供以后使用,并且在每次调用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;
}
}
类测试,其中T:struct,IConvertible
{
私有静态funct\u getInt;
静态测试()
{
var param=表达式参数(typeof(int),“x”);
UnaryExpression body=Expression.Convert(param,typeof(T));
_getInt=Expression.Lambda(body,param.Compile();
}
公共静态测试函数(TX)
{
int n=转换为32(x);
T结果=_getInt(n);
返回结果;
}
}
来自测试的代码如果您想比较静态构造函数和实例构造函数,可以这样考虑
实例构造函数用于实例化特定类的新实例(无论其是公共的、私有的还是受保护的)
静态构造函数用于“初始化”整个类型。这就是为什么在创建第一个实例或引用任何静态成员之前会自动调用静态构造函数。从语义上讲,它只是一段类型初始化代码,而不是构造函数(或者您可以将其视为类型构造函数)
私有构造函数只是具有私有访问可见性的实例构造函数(因此您可以使用它在声明它的同一类中实例化新实例)。不要对这个问题投反对票。Stakcoverflow正在使用反向心理学(不幸的是:)
@Marchin感谢您的解决方案。私有构造函数通常用于避免为类创建实例。但您的反馈是“每次初始化新类/结构实例时都会运行私有构造函数”。@SivaRajini当然!我确定了我的答案