zoukankan      html  css  js  c++  java
  • C#中隐藏(new)、方法重写(override)、重载(overload)的区别

    转自:http://www.cnblogs.com/glife/archive/2009/12/28/1633947.html

    重载、重写和隐藏的定义:

    重载:public string ToString(){return "a";}
              public string ToString(int id){return id.ToString();}

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

    重写:父类:public virtual string ToString(){return "a";}
             子类:public override string ToString(){return "b";}

    继承时发生,在子类中重新定义父类中的方法,子类中的方法和父类的方法是一样的
    例如:基类方法声明为virtual(虚方法),派生类中使用override申明此方法的重写.

    隐藏:基类方法不做申明(默认为非虚方法),在派生类中使用new声明此方法的隐藏。



    overload(重载)——根据参数选择调用的方法;

    override(重写)——访问父类子类皆调用子类的重写方法;

    new(隐藏)  ——访问父类则调用父类的方法,子类子类的方法。

    隐藏(new)示例:

    class A
    {
        public void F()
        {
            Console.WriteLine("A.F");
        }
    }
    class B : A
    {
        new public void F()
        {
            Console.WriteLine("B.F");
        }
    }
    class Test
    {
        static void Main(string[] args)
        {
            B b = new B();
            b.F();
            A a = b;
            a.F();
        }
    } 

    输出为 
       B.F 
       A.F

    重写virtual(虚方法)示例

    Code highlighting produced by Actipro CodeHighlighter (freeware)http://www.CodeHighlighter.com/-->class A
    {
        public virtual void F()
        {
            Console.WriteLine("A.F");
        }
    }
    class B : A
    {
        public override void F()
        {
            Console.WriteLine("B.F");
        }
    }
    class Test
    {
        static void Main()
        {
            B b = new B();
            b.F();
            A a = b;
            a.F();
        }
    }

    输出为 
       B.F 
       B.F

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

       1、覆盖的方法的标志必须要和被覆盖的方法的标志完全匹配,才能达到覆盖的效果;
       2、覆盖的方法的返回值必须和被覆盖的方法的返回一致;
       3、覆盖的方法所抛出的异常必须和被覆盖方法的所抛出的异常一致,或者是其子类;
       4、被覆盖的方法不能为private,否则在其子类中只是新定义了一个方法,并没有对其进行覆盖。

  • 相关阅读:
    Redis源码分析(二十一)--- anet网络通信的封装
    leetcode 总结part1
    leetcode String to Integer (atoi)
    leetcode 165. Compare Version Numbers
    leetcode 189. Rotate Array
    leetcode 168. Excel Sheet Column Title
    leetcode 155. Min Stack
    leetcode 228. Summary Ranges
    leetcode 204. Count Primes
    leetcode 6. ZigZag Conversion
  • 原文地址:https://www.cnblogs.com/jingsheng99/p/4105214.html
Copyright © 2011-2022 走看看