相关疑难解决方法(0)

C#,不变性和公共只读字段

我已经在许多地方读过,公开公开字段并不是一个好主意,因为如果你以后想要更改属性,则必须重新编译使用你的类的所有代码.

但是,在不可变类的情况下,我不明白为什么你需要更改为属性 - 毕竟你不会在'set'中添加逻辑.

对此有任何想法,我错过了什么吗?

差异的例子,对于那些比文本更容易阅读代码的人:)

//Immutable Tuple using public readonly fields
public class Tuple<T1,T2>
{
     public readonly T1 Item1;
     public readonly T2 Item2;
     public Tuple(T1 item1, T2 item2)
     {
         Item1 = item1;
         Item2 = item2;
     }
}

//Immutable Tuple using public properties and private readonly fields
public class Tuple<T1,T2>
{
     private readonly T1 _Item1;
     private readonly T2 _Item2;
     public Tuple(T1 item1, T2 item2)
     {
         _Item1 = item1;
         _Item2 = item2;
     }
     public T1 Item1 { get { return _Item1; …
Run Code Online (Sandbox Code Playgroud)

c# field properties immutability

34
推荐指数
2
解决办法
4779
查看次数

如何在C#类构造函数中使用const

假设我有一个这样的课程:

public class SampleClass
{
    const string UnChangableUserName { get; private set; }
    string Password { get; private set; }

    public SampleClass(string UnChangableUserName, string Password)
    {
        this.Password = Password;
        this.UnChangableUserName = UnChangableUserName;
    }
}
Run Code Online (Sandbox Code Playgroud)

我希望构造函数为const分配一个值,而不是在定义const时要设置的值。我该怎么做?

我知道我不能简单地使用set,但是使用const可以更有效地利用资源,并且更加优雅,其他开发人员也更容易理解,我不希望有set,因此他们不会添加它。

c# constructor const constants

-2
推荐指数
1
解决办法
135
查看次数

C#中的常量类变量

我想在我的班级中声明一个变量,以后不能像这样更改:

obj myobj=new obj()
myobj.CONSTANT_VAR="Changed value" //ERROR!!
Run Code Online (Sandbox Code Playgroud)

...但其值可以像这样访问:

Console.WriteLine(myobj.CONSTANT_VAR)
Run Code Online (Sandbox Code Playgroud)

我尝试了以下方法:

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());
    }
}
Run Code Online (Sandbox Code Playgroud)

但我收到以下错误消息:

constants must have a value assigned
Run Code Online (Sandbox Code Playgroud)

但我不想事先给它赋值..... 我该怎么办?

c# class constants

-3
推荐指数
1
解决办法
153
查看次数

标签 统计

c# ×3

constants ×2

class ×1

const ×1

constructor ×1

field ×1

immutability ×1

properties ×1