我们能够为系统方法创建重载吗?

时间:2014-04-28 11:59:47

标签: c# overloading sealed

我使用自己的LargeWholeNumber类来表示整数值。在System.Math类中,适用类型有许多Max方法。我能为这个比较Max个实例的LargeWholeNumber方法创建一个重载吗?

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

提前感谢您的建议。

3 个答案:

答案 0 :(得分:2)

您无法覆盖非虚拟或静态方法。重写的基本方法必须是虚拟,抽象或覆盖。

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

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

如果要覆盖System方法是非虚拟的,我建议您使用扩展方法

答案 1 :(得分:1)

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

答案 2 :(得分:0)

您无法继承密封类。您的问题的最佳解决方案是编写自己的Math类或使用扩展方法。

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

    }