在C#中的常量类变量
在C#中的常量类变量
这个问题已经有了答案:
我想在我的类中声明一个变量,它不能在以后被更改,如下所示:
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
但我不想预先为它分配一个值....我该怎么办?
admin 更改状态以发布 2023年5月21日
您可以使用 "Readonly"选项,它允许您设置值一次,以后不能更改。
public class obj(){ public int a, b; public readonly 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()); } }
你正在寻找只读的字段或属性,而不是 const
,它是真正的全局常量。
我建议完全避免使用公共字段,而是使用属性-因此在这种情况下,你需要一个只读属性。按照.NET命名约定,你可以有类似于:
public class Obj { public int A { get; set; } public int B { get; set; } public string ConstantVar { get; } public Obj(int x, int y) { A = x; B = y; ConstantVar = /* complex expression */ } public int Do() => A + B - ConstantVar.Length; }