C#入门经典第8版 第九章 定义类

修饰词 :internal 内部的含义、Public 公共含义

 定义时的关键字:abstract 抽象 sealed密封类

继承通过冒号连接 如果继承了类之后再继承接口需要逗号连接如

注意:编译器继承中不允许派生类的可访问性高于基类,也称呼为子类的访问性不能大于父类的访问性质

如果类没有继承任何的父类,那么也会继承Object的父类(默认每个类都会继承Object 它是所有的类的父类,也称为基类)

下图是类定义的可使用的访问修饰符

接口注意事项

注意声明接口的修饰词于内部类的修饰词有点相似 Interface接口,internal内部类

接口中不允许使用 abstract 和sealed 因为接口中都是不包含实例代码(不能实例化可以是继承(接口))

接口不继承object因为它是接口 但可以通过接口类型变量来访问。

Object 父类中的方法使用 

详细概要也是本人写的icon-default.png?t=N7T8https://blog.csdn.net/qq_71897293/article/details/129012844?spm=1001.2014.3001.5502

构造函数和析构函数

​  在您编译代码时没有写入构造函数和虚构函数,编译器会自动加上它们  详情可以看第8章的笔记 ,当前第九章做补充补充链接

任何构造函数都可以配置自己代码执行前调用其他的构造函数。正常结果我们在创建一个类的时候通过new 关键字调用了类的构造函数,其实调用顺序会先触发父类的构造函数,在触发自己的。所有得出无论什么类使用构造函数实例化一个类都会先触发object 的构造函数。

指定构造函数执行顺序 名词 构造函数初始化器(Constructor initializet)关键字base 在构造函数后面使用 base 如下示例

   public class Program:MyClass
    {
        public Program():base(5)
        {
        }
        static void Main(string[] args)
        {
            Program program = new Program();
            //默认顺序 执行Object的构造函数  执行Myclass 构造函数  执行Program 自己的构造函数
            //通过base 改变执行顺序 
            //在默认的构造函数后使用 base 放入一个int 的参数 那么就是指定触发 父类的一个int参数的构造函数
            //base 可以传入参数名 也可以直接传入值  Myclass 的s就是传入的值 5
            //执行顺序 执行Object的构造函数  执行Myclass 一个int 参数的构造函数  执行Program 自己的构造函数
        }
    }
   public class MyClass
    {
        public MyClass()
        {
        }
        public MyClass(int s)
        {
        }
    }

当然还有this关键字 使用方式和base一样

注意 如果没有构造函数指定的构造函数初始化器那么就是编译器会默认创建base();即调用默认的构造函数

对象浏览器

能通过名称空间直接快速访问,名称空间当中的类、成员 、方法等。

类库 class 又称为Class library

我们创建类库,步骤和创建项目是差不多的,在添加项目当中选择找到类库 有.NET framework 的类库 有很多 如下图 按需求来添加,其中添加的类库文件在文件中写了多个类,它不能被执行,因为类库中没有执行入口,类库的作用是将写出的类成员,重新生成,成为dll 这样我们可以将这dll插入到任意项目当中直接使用

类图

在类上右键选择 类图效果如下1-1,但体会到如果没有类图选项,在选修卡 工具->获取工具和功能->等待加载一会 点击上方选项卡 单个组件->在搜索框输入 类设计图 最后效果图附上 1-2步骤示例结果图。类图不仅仅是展示,还能直接在下方的类详细信息中添加或修改成员。如图1-3类图增删改示例

图1-1类图示例效果

1-2步骤示例结果图

图1-3类图增删改示例

接口和抽象类 绿:抽象类 红:接口

相同:接口和抽象类都不能直接实例。但可以声明这些类型的变量。如果这样做,就可以使用多态性。继承这两种类型的对象,指定给他们的变量。接着通过这些变量。来使用这些类型的成员。通俗来说就是将实现接口的类,变量赋值给接口类型的变量。利用接口类型的变量。访问接口类型的成员,但不能直接访问实现接口的类的成员

不同:派生类只能寄存自一个基类。即只能直接继承自一个抽象类,但可以用一个继承链,包含多个抽象类。相反,类可以继承任意多个接口。这两种情况取得的效果是类似的,只是采用接口的方式稍有不同。

抽象类可以拥有抽象成员(没有代码体,且必须在派生类中实现,除非派生类本身。也是一个抽象类)另外,接口成员必须都在使用接口的类,内部实现它们没有。代码体。另外,按照定义,接口成员是公共的,因为他们的目的就是在外部使用。相反,抽象类的成员可以是私有的,只要他们不是抽象的受保护的内部的或受保护的内部成员。其中,受保护的内部成员只能在应用程序的代码或派生类中访问。此外,接口不能包含字段构造函数析构函数。静态成员或常量

结构类型

结构类型与类非常相似,但是其重要的不同点是在于结构是值类型,而类是引用类型

提示:

对象是引用类型,把对象赋给变量时,实际上是把一个指针的变量赋值给了该指针所指向的对象。在实际代码中,指针。是内存中的一个地址,这种情况下,地址是内存中该对象所在的位置。第一个对象引用赋值给类型第2个变量时,实际上是复制了这个地址。

如 Myclass object=objectA

其中 object 是引用类型 其中这两个变量就包含同一个对象的指针

浅度复制,深度复制

复制对象的时候,可以使用object中的MemberwiseClone 方法来完成。这是一个受保护的方法。我们在调用该方法的时候我们就是进行复制。其复制的方式我们称为浅度复制,因为它并未考虑到引用类型。因此,我们在使用当前方法复制新对象中的引用成员就会将。该行对象中的引用成员的同一个对象的指针进行复制。指针那么指向的内存当中所储存该对象的位置就是复制一样的地址。那么效果就会将一个对象的引用成员进行改变之后所复制的那个对象的引用成员也会相对改变,因为它们指向的是同一个内存当中的地址。

窗口中使用的图标含义

 插图:

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

学软件开发的猪

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值