2009-06-17 16 views
1

C#でどのように参照を渡すことができますか?あなたはこの構文を使用してC#で参照によってパラメータを渡すことができCでメソッド内の引数として参照を渡す方法#

functionName(ref variable); 
+0

あなたは、Mainメソッドを見て、コマンドラインパラメータを意味しますか?それとも参照渡しを意味するのですか? メインメソッド - http://msdn.microsoft.com/en-us/library/ms228506aspx パラメーターを渡す - http://msdn.microsoft.com/en-us/library/0f66670z.aspx – RichardOD

答えて

7
private void functionName (ref Type variableName) 
{ 

} 

public void MyMethod(ref string myString) 
{ 

} 

次に、値の前にrefを渡す必要があります。ここで

+0

また、メソッドを呼び出すときには、refキーワードも使用してください。 SomeMethod(ref variableName); –

+0

良い点。私はそれを追加します – kemiller2002

3

それを呼び出すために

+1

これは[典型的には]オブジェクトを渡すために必要ではないことを言及する価値があるかもしれませんが、primativesのみ。 –

+0

はい、非常に良い点。 –

5

あなたの質問は非常に明確ではないが、それは私のarticle on parameter passing in C#は、あなたが本当に尋ねるためのもの何でもお答えすることが十分に可能です。

は特に、あなたは値によって参照を渡し、参照で引数を渡すを区別する必要があります。値のタイプと参照タイプが不明な場合は、my article on that topicを参照することもできます。

0

電話番号:

string companyName = "New Company"; 
GetEmail(ref companyName); 

メソッドコード:

private void GetEmail(ref string companyName) 
{ 

} 
-1

ご質問は明らかではないが、私はC#で、オブジェクトはデフォルトで参照渡しされていることを指摘したいと思います。意味は、オブジェクトを持っていて、そのオブジェクトをそのオブジェクトに変更するメソッドに渡すと、それらの変更は同じオブジェクトを参照するため、呼び出しコードのオブジェクトにも影響します。

+1

"C#では、オブジェクトはデフォルトで参照渡しされます":これは真ではありません... 'ref'修飾子を指定しない限り、値渡しされます。私は、参照型と値型の違い、参照や値によるパラメータ渡しの違いを混乱させていると思います。値でパラメータとして参照型を渡すときは、値で参照を渡します。呼び出された関数はこの参照を変更することはできませんが、参照されたオブジェクトを変更することができます –

+0

参照によって渡されなかったオブジェクトの状態を変更するとかなり楽しいことがわかります。本当にきれいで明解なコードを作成します。 –

+0

@トーマス..あなたはちょうどニックピッキングしています...プリミティブ型は値によって渡され、オブジェクトは参照渡しされます。はい。オブジェクト自体への参照は値によって渡されますが、実際のオブジェクト自体はコピーされず、参照が送信されます。だから、私はオブジェクトが参照渡しされると言っているのです。 – BFree

2

Jon Skeetはこのhereに関する良い記事を持っています。

C#では、値の型(int、double、byte、structなど)はデフォルトで値渡しされます。これは、受信メソッドに新しい型のインスタンスがあることを意味します。値が1のintがメソッドに渡され、メソッドが2に変更された場合、この変更はメソッド内でのみ反映され、呼び出し元のintは1のままです。ただし、refキーワードが追加された場合は、その整数に作られたものは呼び出し元の場所に反映されます。

C#のすべてのクラスは参照型です。つまり、デフォルトでは、参照は値渡しとなります。これは重要な部分です。つまり、オブジェクトのそのインスタンスに加えられた変更は、同じオブジェクトであるため、呼び出し元の場所に反映されます。ただし、メソッドが別のオブジェクトへの参照を変更した場合、この変更は反映されません。これらの変更を反映させる場合は、パラメータにrefキーワードを使用する必要があります。

public static void Main() 
    { 
     int i = 1; 
     Method1(i); //i here is still 1 
     Method2(ref i); //i is now 2 


     SimpleObj obj = new SimpleObj(); 
     obj.Value = 1; 

     Method3(obj); //obj.Value now 2 
     Method4(obj); // obj.Value still 2 
     Method5(ref obj); //obj.Value now 5 
    } 

    private static void Method5(ref SimpleObj obj) 
    { 
     obj = new SimpleObj(); 
     obj.Value = 5; 
    } 

    private static void Method4(SimpleObj obj) 
    { 
     obj = new SimpleObj(); 
     obj.Value = 5; 
    } 

    private static void Method3(SimpleObj obj) 
    { 
     obj.Value++; 
    } 

    private static void Method2(ref int i) 
    { 
     i++; 
    } 

    private static void Method1(int i) 
    { 
     i++; 
    } 

    public class SimpleObj 
    { 
     public int Value { get; set; } 
    } 

refキーワードは、C#3.0の10.6.1.2項で説明しています。 Hereはmsdnのドキュメントです。

関連する問題