面向对象继承第二天

84 阅读3分钟

一、命名空间

可以认为类是属于命名空间的。 如果在当前项目中没有这类的命名空间,需要我们收到导入这个类所在的命名空间。

  1. 用鼠标去点
  2. Alt+shift+F10
  3. using ..... 记住命名空间手动去引用

二、在一个项目中引用另一个项目的类

1.添加引用

2.引用命名空间 image.png

三、值类型和引用类型

1.区别:

1)值类型和引用类型在内存上存储的地方不一样。

2)在传递值类型和引用类型的时候,传递的方式不一样。 值类型我们称之为值传递,引用类型我们称之为引用传递。 我们学的值类型和引用类型:

****值类型:**int、double、bool、char、decimal(金钱)、struct、enum

**引用类型 :string,自定义类,数组

2.存储:

值类型的值存储在内存的栈当中。

引用类型的值存储在内存的堆当中。

QQ图片20221014154124.jpg

三、字符串

1.)字符串的不可变性

当给一个字符串重新赋新值之后,老值并没有销毁,而是重新在堆当中开辟一块新空间存储新值; 当程序结束后GC扫描整个内存,如果发现空间没有被指向,则立即销毁

QQ图片20221014160654.jpg

2)可以把字符串看做是char类型的一个只读数组。

ToCharArray(); 将字符串转换为char数组 nwe string(char[] chs):能够将char数组转换为字符串;

image.png

四、字符串提供的各种方法

1)、Length:获取当前字符串的个数

2)、ToUpper() :将字符串转换为大写形式;

3)、ToLower() :将字符串转换成小写形式;

4)、Equals() : 比较 两个字符串是否相同,可以忽略大小写;

5)、Split(): 分割字符串,返回字符串类型的数组。

6)、Substring(下标): 截取字符串,在截取的时候包含要截取的哪个位置。

7)、IndexOf(): 判断某个字符串在字符串中最后一次出现的位置,如果没有返回-1

8)、LastIndexOf(): 判断某个字符串在字符串中最后出现的位置,如果没有返回-1

9)、StartsWith(): 判断以... 开始

10)、EndsWith(): 判断以...结束

11)、Contains(): 判断某个字符串是否包含指定的字符串

12)、Replace(); 将字符串中的某个字符串替换成一个新的字符串

13)、Trim() : 去掉字符串中前后的空格'

14)、TrimEnd();去掉字符串中结尾的空格

15)、TrimStart():去掉字符串中前面的空格

16)、string.IsNullOrEmpty():判断一个字符串是否为空或者为Null

17)、string.Join(): 将数组按照指定的字符串连接,返回一个字符串。

五、继承

我们可能在一些类中,写一些重复的成员。 我们可以将这些重复的成员,单独封装到一个类中,作为这些类的父类。

子类继承了父类,那么子类从父类哪里继承过来了什么?

首先,子类继承了父类的属性和方法,但并没有继承父类的私有字段。

其次:子类没有继承父类的构造函数。但是,子类会默认的调用父类的无参构造函数来创建父类对象,让子类可以使用父类中的成员。所以,在父类中重新写了一个有参数的构造函数之后,那么无参构造函数就消失了,子类就调用不到,所以子类就会报错。

解决办法

  1. 在父类中重新写一个无参数构造函数
  2. 在子类中显示的调用父类的构造函数,使用关键字:base()

六、继承的特性

  1. 继承的单根性:一个子类只能有一个父类。
  2. 继承的传递性:子传孙,孙传曾孙。

七、查看类图

八、object是所有类的基类

九、new关键字

1.创建对象 2.隐藏从父类那里继承过来的同名成员。隐藏的结果就是子类调用不到父类的同名成员