zoukankan      html  css  js  c++  java
  • 第二章 C#继承&继承类型&虚函数&抽象类&抽象函数&抽象方法&隐藏方法

    继承:实现继承,接口继承。

    C#不支持多实现继承,支持多接口继承

    public class Class4:Class3,IInterface1,IInterface2
    {
    
    }

    虚方法:virtual

    基类中声明virtual方法,在派生类中可以重写,并且调用的时候总是调用重写的方法。

    public class Class1
        {
            public virtual void A()
            {
                Console.WriteLine("Class1.A");
            }
            public void B()
            {
                Console.WriteLine("Class1.B");
            }
        }
    public class Class2 : Class1
        {
            public override void A()
            {
                Console.WriteLine("Class2.A");
            }
            public void B()
            {
                Console.WriteLine("Class2.B");
            }
        }
                Class2 c2 = new Class2();
                Class1 c3 = c2;
                c3.A();
                c3.B();

    输出结果:

    Class2.A
    Class1.B
    原因:Class1 c3 = c2;会把c2转化成Class1类型的,c3.A()CLR会首先调用该类型(即Class1)中的方法,当检测到是virtual类型的时候,会调用派生类中的方法。如果不是virtual类型,直接调用本类的方法。

    可以参考:http://www.cnblogs.com/kdalan/archive/2012/05/29/2523470.html

    抽象类:abstract class

    抽象方法:public abstract void search();

    类中只要有抽象方法,则类必须为抽象类;抽象方法只是声明,没有方法体,抽象类可以被继承,在派生类中必须重写抽象类中的抽象方法。

    隐藏方法:

    在子类和基类中定义一样的方法,则基类中的方法会自动隐藏。但是在子类中会有警告。如有意隐藏请使用new字段。

    public class Class1
        {
            public virtual void A()
            {
                Console.WriteLine("Class1.A");
            }
            public void B()
            {
                Console.WriteLine("Class1.B");
            }
        }
    public class Class2 : Class1
        {
            public override void A()
            {
                Console.WriteLine("Class2.A");
            }
            public new void B()
            {
                Console.WriteLine("Class2.B");
            }
        }

    class2中的 B();跟class1 中的B();声明一样,所以要隐藏class1中的方法,在class2中使用new字段。

  • 相关阅读:
    实现连续测试,要做的事情【译】
    Go语言HTTPServer开发的六种实现
    JSON必知必会【PDF+视频教程】
    给JSONObject添加自定义遍历方法
    利用守护线程隐式关闭线程池
    从错误中学习
    Groovy动态添加方法和属性及Spock单测
    持续测试、持续集成、持续交付、持续部署和DevOps
    有关OAuth 2.0简化模式中步骤D-F的解释
    Spring笔记(五):bean的自动装配
  • 原文地址:https://www.cnblogs.com/housh/p/4706113.html
Copyright © 2011-2022 走看看