zoukankan      html  css  js  c++  java
  • 《C#入门经典》第六版 学习笔记之第九章 定义类

    第八章是从概念层讲述了OOP技术,第九章之后则是具体的将第八章内容精讲。如果第八章不好理解,可以带着疑问去看后面的章节。在后面的章节看完后再回头重温第八章。

    第九章 定义类
    9.1 c#中类的定义
    定义类使用关键字class
    class <ClassName>
    {
            //class members;
    }
    默认情况下,类是内部的,只有当前项目中的代码能够访问。可以用internal访问修饰符来显式的指定这一点
    而如果类是公共的,可由其他项目的代码来访问时,可以用public访问修饰符来指定。
    访问修饰符后可以指定类是抽象类还是密封类——可以用互斥的关键字来指定abstract、sealed。抽象类不能实例化只能继承,可以有抽象成员。密封类不能继承。
    (当前项目指的是什么?)
    类的继承:
    定义类完成后,在后面加分号然后加基类类名。
    public class <ClassName>:<BaseClassName>
    {
            //class members;
    }
    编译器不允许派生类的可访问性高于基类。即内部类可以继承于公共基类,但公共类不能继承于一个内部类。
    接口与基类:
    类不但可以继承,还能在后面指定支持的额接口,如果指定了基类则接口要在基类后面,接口和基类间用逗号分隔。如果未指定基类,接口就在冒号后面即可。可以指定多个接口,都以逗号分隔。
    支持该接口的类必须实现所有接口成员,如果不想用给定的接口成员,可以提供一个空的没有函数代码的实现方法。还可以把接口成员是实现为抽象类的抽象成员。


    表9-1 类定义可以使用的访问修饰符
    修饰符
    含义
    无或internal
    只能在当前项目中访问类
    public
    可以在任何地方访问类
    abstract 或 internal abstract 类只能在当前项目中访问,不能实例化只能被继承
    public abstract
    类可以在任何地方访问,不能实例化只能被继承
    sealed 或 internal sealed
    类只能在当前项目中访问,不能被继承,只能实例化
    public sealed
    类可以在任何地方访问,不能被继承,只能实例化

    接口的定义:
    声明接口与声明类的方式类似,使用关键字不一样,为interface。接口名前一般加大写字母I
    interface <I接口名>
    {
        //Interface members.
    }
    接口的访问修饰符关键字跟类一样,是public 、internal,要接口可以公开访问则必须使用public
    不能在接口中使用关键字abstract、sealed。因为这两个修饰符在接口定义中是无意义的。(没有所谓的抽象接口或密封接口)
    接口不是类,所以没继承System.Object,System.Object的成员可以通过接口类型变量来访问。因此,不能用实例化类的方式来实例化接口。

    9.2 System.Object

    表9-2 System.Object类的方法
    略 P180

    9.3 构造函数和析构函数
    1、在类中,分为公共函数(public)和私有函数(private)
    2、类的对象可以使用公共函数进行实例化,不能使用私有函数进行实例化。
    3、在.NET中使用的析构函数被成为Finalize(),但这不是我们用于声明析构函数的名称。类的析构函数由带有~前缀的类名称来命名(构造函数也使用类名声明)。

    构造函数的执行序列
    1、无论在派生类上使用什么构造函数(默认的构造函数或者非默认的构造函数),除非明确指定,否则就使用基类的默认构造函数。
    2、注意书中的做说明的实例化类的函数时,类的执行顺序。
    3、了解什么是构造函数初始化器、初始化器的用法以及使用初始化器后类的构造函数的执行顺序。
    初始化器:base()和this()
    如果没有给构造函数指定构造函数初始化器,编译器会自动添加base(),则会以默认的执行顺序执行。
    4、注意定义构造函数时,不要创建无限循环。如果两个构造函数相互指定对方为初始化器顺序,二者都是需要对方先执行,就会陷入死循环。

    ★9.4 Visual Studio 中的OOP工具


    9.8浅度和深度复制
    浅度复制方法:MemberwiseClone()
    深度复制需要使用Icloneable接口,同时实现接口的Clone()方法

  • 相关阅读:
    上传文件到七牛云
    工具类
    SpringBoot 整合 JWT Token
    JWT
    SpringBoot使用RedisTemplate整合Redis
    poj1850 Code
    洛谷P1313 计算系数
    洛谷P1602 Sramoc问题
    —Libre#2009. 「SCOI2015」小凸玩密室
    2014-9-27 NOIP模拟赛
  • 原文地址:https://www.cnblogs.com/ssxm831/p/3574533.html
Copyright © 2011-2022 走看看