C#でこのようなことはできますか?
Calculator calculator = new Calculator()
{
protected override int ValueOfK()
{
return 1;
}
};
もしそうなら、どのようにしますか?
Calculatorメソッドをオーバーライドするには、継承元のクラスのメソッドを継承してオーバーライドする必要がありますValueOfK(メソッドが のように宣言されvirtualている場合Calculator)。
C# でメソッドをオーバーライドするメカニズムは他にありません。
public Calculator
{
protected virtual int ValueOfK()
{
return 2;
}
}
public NewKCalculator : Calculator
{
protected override int ValueOfK()
{
return 1;
}
}
いいえ、これは ではありませんJavaScript。実行時に既に定義されている型にメソッドをアタッチすることはできません。
DynamicObjectを使用して、同様の機能を で実現できますC#。しかし、基本的には、それを避けることをお勧めします。自然に可能であれば、アーキテクチャを修正して動的なものを利用する方がよいでしょう。静的型言語の良さを引き続き享受しましょう。
拡張メソッドを使用できます (編集: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;
}
}