• C# 方法重载 overload、方法重写 override、隐藏 new


    一、重载:同一个作用域内发生(比如一个类里面),定义一系列同名方法,但是方法的参数列表不同。这样才能通过传递不同的参数来决定到底调用哪一个。

            值得注意的是,方法重载只有通过参数不同来判断调用哪个方法,而不能通过返回值。至于原因,可以这样理解,你调用一个方法,如果有多个方法同名,系统必须要知道到底你要调用哪一个,参数可以帮助系统在方法入口处得到答案,他根据你给的参数就知道该使用哪个方法。如果只有返回值的不同,很多情况系统是不可能得到有效的判断条件的,比如:double method();int method();如果你这样调用:method()。系统当然不知道该调用哪个。

    示例:

    class  BillPayment
        {
            void PayBill(int TelephoneNumber)
            {
                //此方法用于支付固定电话费
            }
            void PayBill(long CustomerNumber)
            {
                //此方法用于支付电费
            }
            void PayBill(long CustomerNumber,double amount)
            {
                //次方法用于支付移动电话费
            }
        }
    }

    //返回值相同,参数个数不同

    class Add
    {
        int addtion(int num1,int num2)
        {
            return num1+num2;
        }
        int addtion(int num1,int num2,int num3)
        {
            returnnum1+num2+num3;
        }
    }

    //参数不同,返回值不同

    int Method(int[] numbers)
    {
    }
    double Method(double[] numbers)
    {
    }

    注:泛型出现后,相同参数,相同返回值的方法也能构成重载,这里不介绍。

    二、重写:继承时发生,在子类中重新定义父类中的方法,子类中的方法和父类的方法是一样的,即方法名,参数,返回值都相同。

              例如:基类方法声明为virtual(虚方法),派生类中使用override申明此方法的重写.

              

              重写override一般用于接口实现和继承类的方法改写,要注意:

              1、覆盖的方法的标志必须要和被覆盖的方法的名字和参数完全匹配,才能达到覆盖的效果;

              2、覆盖的方法的返回值必须和被覆盖的方法的返回一致;

              3、覆盖的方法所抛出的异常必须和被覆盖方法的所抛出的异常一致,或者是其子类;

              4、被覆盖的方法不能为private,否则在其子类中只是新定义了一个方法,并没有对其进行覆盖。

            示例:

    namespace 方法重写
    {
        class Program
        {
     
            static voidMain(string[] args)
            {
                BaseClass CO =new ClassOverride();
               CO.SetName("Override");
            }
    //基类
            public classBaseClass
            {
                public virtualvoid SetName(string name)
                {
                   Console.WriteLine("基类:我的名字是" + name);
                }
            }
     
    //派生类
            public classClassOverride : BaseClass
            {
                publicoverride void SetName(string name)
                {
                   Console.WriteLine("Override:我的名字是" + name);
                }
            }
     
        }
    }

    在方法重写中,我们介绍了虚方法,那么虚方法和抽象方法有什么区别呢?

    1.虚方法有一个实现部分可以被子类继承,从而使子类获得和基类相同的方法,另外也为派生类提供了覆盖该方法的选项。相反,抽象方法没有提供实现部分,是一种强制派生类覆盖的方法(否则派生类不能成具体类)

    2.(abstract)抽象方法只能在抽象类中声明,(virtual)虚方法不是。

    3.(abstract)抽象方法必须在派生类中重写而(virtual)虚方法不必。

    4.(abstract)抽象方法不能声明方法实体,虚方法可以。

  • 相关阅读:
    php反射类 ReflectionClass
    大写中文数字-財务
    Cookie/Session机制具体解释
    具体解释VB中连接access数据库的几种方法
    Hibernate Criterion
    hdu1151 Air Raid,DAG图的最小路径覆盖
    【收藏】十大Webserver漏洞扫描工具
    美国地名大全(美国城市名称英文、中文)
    图像切割之(五)活动轮廓模型之Snake模型简单介绍
    数据库索引的作用和长处缺点
  • 原文地址:https://www.cnblogs.com/ryanzheng/p/11066272.html
Copyright © 2020-2023  润新知