我们是否能够为系统方法创建重载

本文关键字:方法 创建 重载 系统 是否 我们 | 更新日期: 2023-09-27 18:00:27

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

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

提前感谢您的建议。

我们是否能够为系统方法创建重载

不能重写非虚拟或静态方法。重写的基方法必须是虚拟的、抽象的或重写的。

此处引用:http://msdn.microsoft.com/en-us/library/ebca9ah3.aspx

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

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

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

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

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