0

C# はメソッドのバージョンを処理できますか?

たとえば、Ruby に同じ名前とパラメーターを持つ 2 つのメソッドがある場合、最新のバージョンが実行されます。

C# はこれをどのように処理しますか? エラーを発生させるか、最新バージョンを実行しますか?

4

5 に答える 5

2

C# では、同じクラスに同じ名前とパラメーター リストを持つ 2 つのメソッドを含めることはできません。何らかの方法でメソッドを区別する必要があります。異なる名前を使用するか、異なるパラメーター タイプや異なる数のパラメーターを使用します。コンパイルエラーが発生するだけです。

C# にはメソッドの「最新バージョン」という概念はありませんが、メソッド オーバーライドの形式を達成しようとしているように思えます (私は Ruby に詳しくないので、最新バージョンが何を意味するのかわかりません)、サブクラス化とメソッドのオーバーライドによって、同様のことを達成できる場合があります。

于 2012-08-16T08:35:22.503 に答える
1

メンバーのオーバーロードは過去のものです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 ;
}
于 2012-08-16T08:52:19.897 に答える
1

それらがまったく同じ (名前空間、クラス、名前、およびパラメーター) である場合、コンパイル エラーが発生します。

于 2012-08-16T08:35:38.557 に答える
0

同じクラスにまったく同じシグネチャを持つ 2 つのメソッドを含めることはできません。

于 2012-08-16T08:36:26.307 に答える
0

パラメータは、少なくとも異なる必要があります。そうしないと、コンパイル エラーが発生します。

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;
    }
}
于 2012-08-16T08:41:16.250 に答える