zoukankan      html  css  js  c++  java
  • C#高级编程 (第六版) 学习 第四章:继承

    第四章 继承

    1,继承的类型

    实现继承:

    一个类派生于一个基类型,拥有该基类型所有成员字段和函数。

    接口继承

    一个类型只继承了函数的签名,没有继承任何实现代码。

     

    2,实现继承

    class MyDerivedClass:MyBaseClass,IInterface1,IInterface2

    {

    }

    public struct MyderivedStruct:IInterface1, IInterface2

    {

    }

    类只能继承一个基类,但可以继承多个接口

    结构不能继承结构,但是结构能够继承接口

     

    虚方法:

    在基类中将方法声明为virtual,即可在派生类中重写,属性也支持virtual。

    在派生类中重写基类方法时,需要显式地声明为override。

    成员字段和静态函数都不能声明为virtual

     

    隐藏方法:

    如果签名相同的方法在基类和派生类中都进行了声明,但该方法没有被声明为virtual或者override,派生类方法就会隐藏基类方法。

    如果派生类需要隐藏方法,应该使用new关键字,否则编译器会提示警告

    class yDerivedClass:HisBaseClass

    {

        public new int MyMethod()

        {

        }

    }

     

    调用函数的基类版本

    使用base.<MethodName>()调用函数的基类版本。

     

    抽象类和抽象函数

    将类和函数声明为abstract,抽象类不能实例化,抽象函数没有执行代码,必须在非抽象的派生类中重写。抽象函数总是虚拟的,但是不能显式地声明为virtual,会报错。如果类包含抽象函数,则类必须声明为抽象的。

     

    密封类和密封方法

    C#允许将类和方法声明为sealed。对于类,表示不能继承,对于方法,表示不能重写。

    要在方法或者属性上使用sealed,必须现在基类上声明为虚拟的。否则会报错。

     

    修饰符

    可见性修饰符

    修饰符

    应用于

    说明

    public

    所有类型或者成员

    任何代码均可以访问该方法

    protected

    类型和内嵌类型的所有成员

    只有派生的类型能够访问该方法

    internal

    类型和内嵌类型的所有成员

    只能在包含它的程序集中访问该方法

    private

    所有的类型或成员

    只能在它所属的类型中访问该方法

    protected internal

    类型和内嵌类型的所有成员

    只能在包含它的程序集和派生类型的代码中访问该方法

    类型不能定义为protected,private和protected internal,这些修饰符对于包含在命名空间中的类型来说是没有意义的。编译器也会报错。

    但是对于嵌套类型,是有效的。

    public class OuterClass

    {

        protected class InnerClass

        {

            

        }

    }

    嵌套的内部类型总是可以访问外部类的所有成员,包括私有成员。

     

    4,接口

    声明接口

    以:System.IDisposable接口为例:

    public interface IDisposable

    {

        void Dispose();

    }

    声明接口和声明抽象类在语法上是一致的,但不允许提供接口中任何成员的执行方式。一般情况下,接口中只能包含方法、属性、索引器和事件的声明。

    不能实例化接口,它只能包含其成员的签名。接口不能有构造函数或者字段。也不能有运算符重载。

    在接口定义还不允许声明成员上的修饰符。接口成员总是公有的,不能声明为虚拟的或者静态的。

    实现接口的类必须提供所有接口方法和属性的实现代码。
    接口仅表示成员的存在性,类负责确定这些成员是虚拟的还是抽象的。

     

    接口可派生,派生方法和类的继承相同。

  • 相关阅读:
    Maven项目中的配置文件找不到以及打包问题
    企业信息化快速开发平台 JeeSite
    http缓存浅谈
    <mvc:annotation-driven />注解意义
    Spring中报"Could not resolve placeholder"的解决方案
    eclipse怎么停止building workspace
    利用mybatis-generator自动生成代码
    Java 8 中的 Streams API 详解
    tomca配置文件自动还原问题的解决 server.xml content.xml 等
    tomcat 修改默认字符集
  • 原文地址:https://www.cnblogs.com/xyb930826/p/5281619.html
Copyright © 2011-2022 走看看