嘿,我想要这样的东西
int a=0;
a=5(be unchangeable);
a=3;
Console.WriteLine(a);//which will print 5 and not 3
所以基本上将变量声明为一个数字并使其成为最终且不可更改的,我尝试环顾四周,但我只发现在声明 int 时工作的东西,而不是声明它的新值。
嘿,我想要这样的东西
int a=0;
a=5(be unchangeable);
a=3;
Console.WriteLine(a);//which will print 5 and not 3
所以基本上将变量声明为一个数字并使其成为最终且不可更改的,我尝试环顾四周,但我只发现在声明 int 时工作的东西,而不是声明它的新值。
你想要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
我想,这和你能得到的一样好。
使用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
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 标识一个指针并&
指定内存地址。但是您应该注意指针,因为与引用类型不同,默认垃圾回收机制不会跟踪指针类型。