2017-06-09 6 views
0

ref修飾語について何か質問したいと思います。私が知っていると理解して何ref修飾語を含むパラメータは正確に何ですか?

:REF修飾子を使用する方法では 、そこに値渡しのようにデータのないコピーできなくなりますが、パラメータは直接引数の値へのアクセスを持っています。基本的には、メソッドのスコープで行ったことは、呼び出し元のスコープで引数(渡された変数)を使用した場合と同じように動作します。

と私は正確にREF修飾子をパラメータに保存されているものを聞きたい:私はREF修飾子とメソッドに引数を渡す場合、引数の値への参照が含まれている パラメータのだろうか?それとも何か他のことですか?

あなたはref属性を持つパラメータを持っている場合

+3

A 'REF' パラメータは、A含んでなり、メモリ内のポインタへの参照。実際の値が格納されます。 – Fabjan

+0

'ref'キーワード – sab669

+1

https:// ptgmediaでMicrosoftの[記事](https://docs.microsoft.com/en-us/dotnet/csharp/language-reference/keywords/ref)をチェックしてみてください。 pearsoncmg.com/images/chap8_9781509301041/elementLinks/08fig01.jpg –

答えて

1

、それが参照していない値で引数を渡すあなたの答えをいただき、ありがとうございます。これは、変数の新しいコピーが作成されていないことを意味します。むしろ元の関数へのポインタが関数内で使用されています。

public void Foo() 
    { 
     var x = 0; 
     Bar(x); // x still equals 0 
     Bar(ref x); // x now equals 1 
    } 

    public void Bar(ref int x) 
    { 
     x = 1; 
    } 

    public void Bar(int x) 
    { 
     x = 1; 
    } 
1

のは、我々はこの方法があるとしましょう:

public void DoSomething(int number) 
{ 
    number = 20; 
} 

をそして、我々はそれを使用する:

var number = 10; 
DoSomething(number); 
Console.WriteLine("Our number is: {0}", number); 

出力はOur number is: 10だろう。私たちの番号は20になりません。

の値を渡しているので、それはです。変更する前に基本的にnumberのコピーを取っています。しかし

、我々は代わりに参照渡し場合:その後、

public void DoSomething(ref int number) 
{ 
    number = 20; 
} 

そして、我々の方法を使用する:

var number = 10; 
DoSomething(ref number); 
Console.WriteLine("Our number is: {0}", number); 

出力、その後はOur number is: 20

関連する問題