【发布时间】:2021-08-30 12:30:01
【问题描述】:
我想在我的类中声明一个变量,以后不能像这样更改:
obj myobj=new obj()
myobj.CONSTANT_VAR="Changed value" //ERROR!!
...但是可以像这样访问其值:
Console.WriteLine(myobj.CONSTANT_VAR)
我尝试了以下方法:
public class obj{
public int a, b;
public const string CONSTANT_VAR;
public obj(int x,int y){
a=x;
b=y;
CONSTANT_VAR=1/(a*((""+a).Length)+3/(b*((""+b).Length)).ToString();
}
public int do(){
return this.a+this.b-(CONSTANT_VAR).Length;
}
}
class DriverClass(){
static void Main(){
obj myObj=new obj(2,3);
myObj.a=34;
myObj.b=35;
myObj.CONSTANT_VAR="changed ur string lol"; //i want it to print error
Console.WriteLine(CONSTANT_VAR); //no error
Console.WriteLine(myObj.add());
}
}
但我却收到以下错误消息:
constants must have a value assigned
但我不想事先给它赋值..... 我该怎么办?
【问题讨论】:
-
如果您发布的代码除了您面临的问题之外有效,这将非常有帮助 - 您的类声明一开始就无效。遵循命名约定也很重要,即使只是示例代码。
-
首先,你的代码不应该编译,因为你不能在类名中使用“()”。然后消息已经告诉您: "constants must have a value assigned" ,而您没有:
public const string CONSTANT_VAR;- 必须立即分配。如果你不能这样做,你就不能使用const。您可以使用的是public readonly字段。可以在ctor中分配。 -
在某人更改
a和/或b(如在您的Main方法中)之后,CONSTANT_VAR是否应该反映该更改或保持obj实例构建时的状态? -
对我犯的愚蠢错误感到抱歉,因为我刚刚从 python 之类的语言迁移到 c#