如何在C#中使变量(不是类成员)"只读"

dev*_*eak 4 c# c#-3.0 c#-4.0

我是C#世界的新手,我找不到在C#中声明只读变量的方法(类似于在c ++中声明"const"变量).有吗?

我给你举个例子:

...
int f() { return x; } // x is not const member
...
void g() {
    int readOnlyVar = f(); // is there a method to declare readOnlyVar as read only or const

    // Some code in which I want to restrict access to readOnlyVar to read only 
}
Run Code Online (Sandbox Code Playgroud)

Ode*_*ded 11

没有相同的类比.

readonly关键字允许变量值要被突变,但只有在一个构造函数.

const关键字是指该值不能突变并需要一个编译时间常数,并且可以仅是以下类型之一:为sbyte,字节,短,USHORT,INT,UINT,长,ULONG,炭,浮点,双精度,小数,布尔,字符串,枚举类型或引用类型.(C#4.0规范§10.4).

在c#中,readonly仅适用于字段,不能应用于局部变量.


Jak*_*kob 5

不,您的代码示例没有解决方案。

const在 C# 中用于编译时常量,并且由于变量从函数获取其值,因此在编译时不知道它。

readonly关键字可以实现您正在寻找的功能,但这仅适用于类中的成员变量(并且仅允许在类的构造函数中设置变量)。

但是,另一方面,你为什么需要它呢?如果你的函数很长,应该将其重构为更小的函数。如果不是很长,那么为什么需要执行这样的规则呢?恐怕只是不要分配给readOnlyVar你可能是我对你最好的建议。