C# はメソッドのバージョンを処理できますか?
たとえば、Ruby に同じ名前とパラメーターを持つ 2 つのメソッドがある場合、最新のバージョンが実行されます。
C# はこれをどのように処理しますか? エラーを発生させるか、最新バージョンを実行しますか?
C# では、同じクラスに同じ名前とパラメーター リストを持つ 2 つのメソッドを含めることはできません。何らかの方法でメソッドを区別する必要があります。異なる名前を使用するか、異なるパラメーター タイプや異なる数のパラメーターを使用します。コンパイルエラーが発生するだけです。
C# にはメソッドの「最新バージョン」という概念はありませんが、メソッド オーバーライドの形式を達成しようとしているように思えます (私は Ruby に詳しくないので、最新バージョンが何を意味するのかわかりません)、サブクラス化とメソッドのオーバーライドによって、同様のことを達成できる場合があります。
メンバーのオーバーロードは過去のものですc#
の使用はoptional parameters
はるかに優れています。重複するコードはなく、維持するコードも少なくなります。
public int SomeCalcMethod(int object1, int object2, int? object3 = null)
{
return object1 + object2 + (int)(object3 ?? 0);
}
メソッドをオーバーロードする必要はありません:
public int SomeCalcMethod(int object1 , int object2)
{
return object1 + object2;
}
public int SomeCalcMethod(int object1 , int object2, int object3 )
{
return object1 + object2+ object3 ;
}
それらがまったく同じ (名前空間、クラス、名前、およびパラメーター) である場合、コンパイル エラーが発生します。
同じクラスにまったく同じシグネチャを持つ 2 つのメソッドを含めることはできません。
パラメータは、少なくとも異なる必要があります。そうしないと、コンパイル エラーが発生します。
class CalculateSomething
{
public static int Plus(int number1, int number2)
{
return Plus(number1, number2, 0);
}
public static int Plus(int number1, int number2, int number3)
{
return number1 + number2 + number3;
}
}