2

嘿,我想要这样的东西

int a=0;
a=5(be unchangeable);
a=3;
Console.WriteLine(a);//which will print 5 and not 3

所以基本上将变量声明为一个数字并使其成为最终且不可更改的,我尝试环顾四周,但我只发现在声明 int 时工作的东西,而不是声明它的新值。

4

5 回答 5

6

这不行吗?

const int a = 5;

请参阅const(C# 参考)

于 2013-01-02T23:57:47.863 回答
3
const int a = 0;

const 关键字用于修改字段或局部变量的声明。它指定字段或局部变量的值是常数,这意味着它不能被修改。

参考

于 2013-01-02T23:56:16.003 回答
3

你想要const关键字。

const int a = 5;

来自MSDN

const 关键字用于修改字段或局部变量的声明。它指定不能修改字段或局部变量的值。

编辑:您的要求听起来很奇怪而且没用。但是如果你真的需要它,你就必须创建一个自定义类型。我建议一个带有bool属性的类,说明它是否可变。

public class MyCustomInt
{
    public bool IsMutable { get; set; }

    private int _myInt;
    public int MyInt 
    { 
        get
        {
            return _myInt;
        } 
        set
        {
            if(IsMutable)
            {
                _myInt = value;
            }
        }
    }

    public MyCustomInt(int val)
    { 
        MyInt = val;
        IsMutable = true;
    }
}

然后当你使用它时:

MyCustomInt a = new MyCustomInt(0);
a.MyInt = 5;
a.IsMutable = false;
a.MyInt = 3; //Won't change here!
Console.WriteLine(a); //Prints 5 and not 3

我想,这和你能得到的一样好。

于 2013-01-02T23:56:31.807 回答
3

使用readonly

因为它可以由构造函数更改,但不能再更改。

public class MyClass {
 private readonly int a = 0;
 public MyClass(int a) {
  this.a = a;
 }

 public void DoSomethingWithA() {
   Console.WriteLine(this.a);
   //a = 5 // don't try this at home kids
 }
}

new MyClass(5).DoSomethingWithA();

const之间的一个很好的比较readonly

于 2013-01-03T00:04:14.667 回答
0

const您可以在关键字中使用常量。

const int a = 5;

但如果你这样做,你将不被允许更改为另一个值。

您还可以检查指针的使用:

int x = 5;
int y = 3;
int *ptr1 = &x; // point to x memory address
int *ptr2 = &y; // point to y memory address

Console.WriteLine(x); // print 5
Console.WriteLine(y); // print 3

Console.WriteLine((int)ptr1); // print 5
Console.WriteLine((int)ptr2); // print 3
Console.WriteLine(*ptr1); // print 5
Console.WriteLine(*ptr2); // print 3

*char 标识一个指针并&指定内存地址。但是您应该注意指针,因为与引用类型不同,默认垃圾回收机制不会跟踪指针类型。

于 2013-01-02T23:59:41.430 回答