public class A
{
void methodA(int a){}
void methodA(ref int a){}
}
static void Main()
{
int a=1;
new classA().methodA(a);
}
Mainクラスでは、どのメソッドが呼び出されますか?クラスAのメソッドはオーバーロードされていますか?値または参照パラメーターに基づいてオーバーライドできますか?私を明確にするために助けてください。
public class A
{
void methodA(int a){}
void methodA(ref int a){}
}
static void Main()
{
int a=1;
new classA().methodA(a);
}
Mainクラスでは、どのメソッドが呼び出されますか?クラスAのメソッドはオーバーロードされていますか?値または参照パラメーターに基づいてオーバーライドできますか?私を明確にするために助けてください。
コードを修正した後:
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) { } }
new A().methodA(a);
ref
非バージョンを呼び出します。
new A().methodA(ref a);
バージョンを呼び出しますref
。
C#では、参照によって渡すかどうかを明示的に指定する必要があります。
次の通話は異なります
int a = 5;
methodA(a);
methodA(ref a );
次の例に示すように、一方のメソッドに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)
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)