1
public class A
{
void methodA(int a){}
void methodA(ref int a){}
}

 static void Main()
  {
    int a=1;
    new classA().methodA(a);
  }

Mainクラスでは、どのメソッドが呼び出されますか?クラスAのメソッドはオーバーロードされていますか?値または参照パラメーターに基づいてオーバーライドできますか?私を明確にするために助けてください。

4

5 に答える 5

3

コードを修正した後:

public class ClassA
{
    public void methodA(int a) 
    {
        Console.WriteLine("Without ref");
    }

    public void methodA(ref int a) 
    {
        Console.WriteLine("With ref");
    }
}

class Program
{
    static void Main(string[] args)
    {
        int i = 1;
        var a = new ClassA();

        a.methodA(i);
        a.methodA(ref i);

        Console.ReadKey(true);
    }
}

最初の呼び出しで「参照なし」が出力され、2番目の呼び出しで「参照あり」が出力されることがわかります。あなたはこれを自分で行うことができたでしょう。

マニュアルには、それは完全に可能であると書かれています。

ただし、次の例に示すように、一方のメソッドにrefまたはoutパラメーターがあり、もう一方のメソッドにvalueパラメーターがある場合、オーバーロードを実行できます。

class RefOverloadExample
{
    public void SampleMethod(int i) { }
    public void SampleMethod(ref int i) { }
}
于 2012-10-04T07:12:35.580 に答える
1
new A().methodA(a); 

ref非バージョンを呼び出します。

new A().methodA(ref a); 

バージョンを呼び出しますref

于 2012-10-04T07:12:01.420 に答える
0

C#では、参照によって渡すかどうかを明示的に指定する必要があります。

次の通話は異なります

int a = 5;
methodA(a);
methodA(ref a );
于 2012-10-04T07:14:01.350 に答える
0

refキーワードMSDN

次の例に示すように、一方のメソッドにrefまたはoutパラメーターがあり、もう一方のメソッドにvalueパラメーターがある場合、オーバーロードを実行できます。

あなたの場合、それはmethodA(int a){}refを持つものを呼び出さないでしょう。

クラスは次のようになります。

public class A
{
    public void methodA(int a) 
    { 
    }
    public void methodA(ref int a) 
    { 
    }
}

オーバーロードされたメソッドをrefキーワードで呼び出す場合は、メソッド呼び出しで指定する必要がありますref。好き:

int a = 1;
A classAObj = new A();
classAObj.methodA(ref a);

上記のコードはオーバーロードされたものに解決されますmethodA(ref a)

于 2012-10-04T07:14:31.163 に答える
0
public class A
{
void methodA(int a){}
void methodA(ref int a){}
}

 static void Main()
  {
    int a=1;
    new classA().methodA(a);
    new classA().methodA(ref a)//You can add this to see the difference

  }

どちらも違います...

new classA().methodA(a);
new classA().methodA(ref a)
于 2012-10-04T07:28:02.133 に答える