1

我将自己的LargeWholeNumber类用于整数值。在System.Math类中有许多Max适用类型的方法。我是否能够为此Max方法创建一个重载来比较LargeWholeNumber实例?

我尝试创建自己的Math继承自的类System.Math,但它说"Cannot inherit from sealed class 'Math'"

提前感谢您的建议。

4

3 回答 3

2

您不能覆盖非虚拟或静态方法。被覆盖的基方法必须是虚拟的、抽象的或覆盖的。

从这里参考:http: //msdn.microsoft.com/en-us/library/ebca9ah3.aspx

因此,如果 System 方法是虚拟的,您可以覆盖它。如果没有,你不能。

如果你想覆盖一个非虚拟的系统方法,我建议你使用扩展方法

于 2014-04-28T12:11:12.533 回答
1

不,基本上。对于实例方法,您可以使用扩展方法来添加新的伪重载。这对于静态方法是不可能的。

于 2014-04-28T12:02:11.470 回答
0

你不能继承一个密封的类。您的问题的最佳解决方案是编写自己的数学类或使用扩展方法。

    void Main()
    {
        var a = new LargeWholeNumber{Number = 2};
        var b = new LargeWholeNumber{Number = 3};

        var bigger = a.Max(b);
        var bigger2 = ExtMethods.Max(a,b);
    }


    public class LargeWholeNumber 
    {
        public int Number {get;set;}
    }


    public static class ExtMethods
    {
        public static LargeWholeNumber Max(this LargeWholeNumber inNumber, 
LargeWholeNumber secondNumber)
        {
            if(inNumber.Number >= secondNumber.Number)
                return inNumber;
            else 
                return secondNumber;
        }

    }
于 2014-04-28T12:10:41.443 回答