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 に答える