有没有一种方法可以将函数标记为只能从静态构造函数调用/调用



我的一个类有一个相当大的静态构造函数,我想重构它,将初始化的各个部分封装在静态函数中。

这个静态构造函数经常做的一件事就是初始化静态只读字段的值。然而,当我试图将这些部分移动到函数中时,编译器显然不允许我,因为这些部分只能在静态构造函数中设置。这是有道理的,因为它不知道我只打算从静态构造函数中调用这些函数。

有办法解决这个问题吗?例如,我可以在函数上设置某种属性来告诉编译器函数只能从静态构造函数调用吗?

您可以在静态构造函数中定义本地函数;

public class MyClass {
public static readonly int Value;

static MyClass(){
Value = Calc(1);

return;

int Calc(int a) => a;
}
}

C#编译器将把那些本地函数变成静态方法,它们的名称发音不清。

您可以使用staticprivate关键字

using System;
public class User {
public static readonly string Name;

static User(){
Name = GetName();
}

//`private` function to only be called in static class itself
private static string GetName() {
return "Testing";
}
}
public class Program
{
public static void Main()
{
Console.WriteLine(User.Name);
}
}

此解决方案的一个附带说明是,它可以帮助您防止外部函数的调用,但不能防止内部函数在内部调用。

最新更新