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字段。

  • 相关阅读:
    Vim快捷键,行首行尾
    java程序 cpu占用过高分析
    svn merge操作
    linux root用户无法删除文件,提示permission denied
    诡异问题:tomcat启动一直卡住,strace跟踪提示apache-tomcat核心文件找不到。
    转:xcode项目打不开:incompatible project version问题
    路由器当交换机用
    visual studio远程调试 remote debugger
    Sql server锁
    long 在不同操作系统下所占用的字节数
  • 原文地址:https://www.cnblogs.com/housh/p/4706113.html
Copyright © 2011-2022 走看看