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;
}
}