0

C#でこのようなことはできますか?

Calculator calculator = new Calculator()
{
    protected override int ValueOfK() 
    {
        return 1;
    }
};

もしそうなら、どのようにしますか?

4

3 に答える 3

3

Calculatorメソッドをオーバーライドするには、継承元のクラスのメソッドを継承してオーバーライドする必要がありますValueOfK(メソッドが のように宣言されvirtualている場合Calculator)。

C# でメソッドをオーバーライドするメカニズムは他にありません。

public Calculator
{
    protected virtual int ValueOfK() 
    {
        return 2;
    }
}

public NewKCalculator : Calculator
{
    protected override int ValueOfK() 
    {
        return 1;
    }
}
于 2012-09-06T08:55:22.277 に答える
2

いいえ、これは ではありませんJavaScript。実行時に既に定義されている型にメソッドをアタッチすることはできません。

DynamicObjectを使用して、同様の機能を で実現できますC#。しかし、基本的には、それを避けることをお勧めします。自然に可能であれば、アーキテクチャを修正して動的なものを利用する方がよいでしょう。静的型言語の良さを引き続き享受しましょう。

于 2012-09-06T08:54:27.893 に答える
0

拡張メソッドを使用できます (編集:Calculator実装されていない場合ValueOfK()) (詳細: MSDN )

 Calculator calc = new Calculator();
 int val=calc.ValueOfK();

拡大:

public static class MyExtension
{
    public static int ValueOfK(this Calculator calc)
    {
        return 1;
    }
}

編集:

それ以外の場合は、OdedCalculatorが既に述べたように、から継承してオーバーライドする必要がありますValueOfK。メソッドがある場合、non-virtualまたはキーワードstaticを使用する必要がある場合:new

public class Calculator
{
    protected int ValueOfK()
    {
        return 0;
    }
}

public class BetterCalculator : Calculator
{
    protected new int ValueOfK()
    {
        return 1;
    }
}
于 2012-09-06T09:08:31.750 に答える