在C#中的常量类变量

39 浏览
0 Comments

在C#中的常量类变量

这个问题已经有了答案

如何实现只读属性

在C#中const和readonly有什么区别?

我想在我的类中声明一个变量,它不能在以后被更改,如下所示:

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日
0
0 Comments

您可以使用 "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());
    }
}

0
0 Comments

你正在寻找只读的字段或属性,而不是 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;
}

0