我可以在C#中做这样的事情吗?
Calculator calculator = new Calculator()
{
protected override int ValueOfK()
{
return 1;
}
};
如果是这样,你是怎么做到的?
答案 0 :(得分:3)
为了覆盖方法,您需要继承Calculator
并覆盖继承类中的ValueOfK
方法(前提是它在virtual
中声明为Calculator
)。
没有其他机制可以覆盖C#中的方法。
public Calculator
{
protected virtual int ValueOfK()
{
return 2;
}
}
public NewKCalculator : Calculator
{
protected override int ValueOfK()
{
return 1;
}
}
答案 1 :(得分:2)
不,这不是JavaScript
。您无法在运行时将方法附加到已定义的类型。
您可以使用DynamicObject在C#
中实现类似功能。
但是,基本上,我建议避免这种情况。修改架构,然后利用动态的东西,如果它自然可能的话,它会更好。让我们继续受益于静态类型语言的优点。
答案 2 :(得分: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;
}
}
修改强>
除非提及 Oded ,否则您需要继承Calculator
并覆盖ValueOfK
。如果方法为non-virtual
或static
,则需要使用new
关键字:
public class Calculator
{
protected int ValueOfK()
{
return 0;
}
}
public class BetterCalculator : Calculator
{
protected new int ValueOfK()
{
return 1;
}
}