0

我可以在 C# 中做这样的事情吗?

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

如果是这样,你怎么做?

4

3 回答 3

3

为了覆盖一个方法,您需要继承Calculator并覆盖ValueOfK继承类中的方法(前提是它被声明为virtualin 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

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;
    }
}
于 2012-09-06T09:08:31.750 回答