相关疑难解决方法(0)

在静态类中使用consts

上周末我遇到了一个开源项目,当时我碰到了一些代码,让我困惑地查看了C#规范中的用法.

问题中的代码如下:

internal static class SomeStaticClass
{
    private const int CommonlyUsedValue = 42;

    internal static string UseCommonlyUsedValue(...)
    {
        // some code
        value = CommonlyUsedValue + ...;

        return value.ToString();
    }
}
Run Code Online (Sandbox Code Playgroud)

我被猝不及防,因为这似乎是静态函数使用的非静态字段,有些如何在静态类中编译得很好!

规范声明(§10.4):

常量声明可以包括一组属性(§17),一个新修饰符(§10.3.4),以及四个访问修饰符的有效组合(§10.3.5).属性和修饰符适用于constant-declaration声明的所有成员.尽管常量被认为是静态成员,但常量声明既不需要也不允许使用静态修饰符.同一修饰符在常量声明中多次出现是错误的.

所以现在它更有意义,因为常量被认为是静态成员,但句子的其余部分对我来说有点令人惊讶.为什么常量声明既不需要也不允许使用静态修饰符?不可否认,我不知道这个规范是否足以让它立即变得有意义,但为什么决定不强制常量使用静态修饰符如果它们被认为是静态的?

查看该段落中的最后一句,我无法弄清楚它是否直接与前一个语句有关,并且在常量上有一些隐式静态修饰符,或者它是否作为常量的另一个规则.任何人都可以帮我解决这个问题吗?

c# static constants

31
推荐指数
3
解决办法
1万
查看次数

C#切换/中断

看来我需要在使用C#的switch语句中的每个case块中使用break.

我可以在其他语言中看到这个原因,您可以通过下一个案例陈述.

案例块是否可能落入其他案例块?

非常感谢,非常感谢!

c# break switch-statement

13
推荐指数
2
解决办法
2万
查看次数

为什么C#静态构造函数需要括号?

考虑:

class Foo
{
    static Foo()
    {
        // Static initialisation
    }
}
Run Code Online (Sandbox Code Playgroud)

为什么()需要static Foo() {...}?静态构造函数必须始终是无参数的,为什么要这么麻烦?它们是否有必要避免一些解析器歧义,或者只是为了保持与常规无参数构造函数的一致性?

由于它看起来非常像初始化块,我经常发现自己意外地将它们排除在外,然后不得不考虑几秒钟的错误.如果他们可以以同样的方式被淘汰将是很好的.

c# static-constructor syntactic-sugar

3
推荐指数
2
解决办法
675
查看次数