我可以在 C# 中做这样的事情吗?
Calculator calculator = new Calculator()
{
protected override int ValueOfK()
{
return 1;
}
};
如果是这样,你怎么做?
为了覆盖一个方法,您需要继承Calculator
并覆盖ValueOfK
继承类中的方法(前提是它被声明为virtual
in Calculator
)。
没有其他机制可以覆盖 C# 中的方法。
public Calculator
{
protected virtual int ValueOfK()
{
return 2;
}
}
public NewKCalculator : Calculator
{
protected override int ValueOfK()
{
return 1;
}
}
不,这不是JavaScript
. 您不能在运行时将方法附加到已定义的类型。
您可以使用DynamicObject在. 但是,基本上,我建议避免这种情况。如果可能的话,最好修改架构,然后使用动态的东西。让我们继续受益于静态类型语言的优点。C#
You can use extension method (EDIT: if the Calculator
does not implement ValueOfK()
) (More info : MSDN )
Calculator calc = new Calculator();
int val=calc.ValueOfK();
Extension:
public static class MyExtension
{
public static int ValueOfK(this Calculator calc)
{
return 1;
}
}
EDIT:
Otherwise as Oded mentioned already you need to inherit from Calculator
and override the ValueOfK
. If the method is non-virtual
or static
you need to use new
keyword:
public class Calculator
{
protected int ValueOfK()
{
return 0;
}
}
public class BetterCalculator : Calculator
{
protected new int ValueOfK()
{
return 1;
}
}