十一、面向对象 其他要点
文章目录
- 1、命名空间 namespace
- 2、object 方法
- 2.1、静态方法
- 2.2、成员方法
- 2.3、虚方法
- 3、String 常用方法
- 4、StringBuilder
- 5、结构体和类区别
- 6、抽象类和接口区别
1、命名空间 namespace
- 命名空间是用来组织和重用代码的
- 不同命名空间的相互使用,需要通过
using
引用命名空间 或 命名空间点调用以指明出处
补充 访问修饰符
internal
:只能在该程序集中使用
2、object 方法
2.1、静态方法
调用时可以不用写
object.
,因为 object 是所有类的基类,任何类都继承了这个方法,直接使用即可
Equals(object objA, object objB)
:判断两个对象是否相等- 最终判断权,归左侧对象里的
Equals
所有
- 最终判断权,归左侧对象里的
ReferenceEquals(object objA, object objB)
:判断两个对象是否引用是否相同(主要用来比较引用类型对象)- 值类型对象返回的始终是
false
- 值类型对象返回的始终是
2.2、成员方法
都是用 extern 关键字修饰的,声明在外部实现的方法
GetType()
:获取对象运行时的类型 TypeMemberwiseClone()
:获取对象的浅拷贝对象
2.3、虚方法
ToString()
:返回当前对象代表的字符串- 我们也可以重写该方法定义自己的对象转字符串方法
Equals(object obj)
:默认实现是比较两者引用是否相同,相当于ReferenceEquals
,但是微软在所有值类型的基类System.ValueType
中重写了该方法,用来比较值是否相等- 我们也可以重写该方法定义自己的比较相等方法
GetHashCode()
:获取对象的哈希码
3、String 常用方法
字符串实质就是
char[]
string
转char[]
:char[] arr = str.ToCharArray();
- 直接通过索引器获取更方便(只读):
str[0]
- 字符串长度:
string.Length
- 直接通过索引器获取更方便(只读):
- 字符串拼接:
str.Format("{0}{1}", "xx", "xxx")
- 正向查找字符/字符串位置:
str.IndexOf("x")
- 反向查找字符/字符串位置:
str.LastIndexOf("x")
- 移除指定下标到结束的字符:
str.Remove(index)
- 两个参数:
str.Remove(index, length)
- 两个参数:
- 替换指定字符串:
str.Replace(oldStr, newStr)
- 大小写转换:
str.ToUpper();
+str.ToLower()
- 字符串截取从下标开始到结束:
str.Substring(index)
- 两个参数:
str.Substring(index, length)
- 两个参数:
- 字符串分割:
str.Split('x')
4、StringBuilder
- 所属 namespace:
System.Text
- 实例化:
StringBuilder sb = new StringBuilder("xxx");
- 容量:
sb.Capacity
- 长度:
sb.Length
- 增加:
sb.Append("xxx").AppendFormat("{0}{1}", x1, x2)...
- 删除:
sb.Remove(index, length)
- 改写:
sb[index] = 'x'
- 查询:
sb[index]
- 插入:
sb.Insert(index, "xxx")
- 替换:
sb.Replace(oldStr, newStr)
- 清空:
sb.Clear()
补充:相等判断:
sb1.Equals(sb2)
5、结构体和类区别
\ | class | Struct |
---|---|---|
类型 | 引用 | 值 |
存储位置 | 堆 | 栈 |
使用 protected 修饰 | 可 | 不可 |
变量指定初始值 | 随意 | 不可 |
声明无参构造 | 随意 | 不可 |
声明有参构造后 默认的无参构造是否被顶掉 | 是 | 否 |
构造函数重初始化全部变量 | 随意 | 必须 |
析构函数 | 有 | 无 |
继承 | 可 | 不可 |
static 修饰 | 可 | 不可 |
内部是否可声明自己类型的变量 | 可 | 不可 |
补充:结构体可以继承接口,因为接口是行为抽象,只是一种规范
6、抽象类和接口区别
- 相同点
- 都可被继承
- 都不能实例化
- 都可声明方法
- 子类必须实现未实现的方法
- 都遵循里氏替换原则
- 区别如下表
\ | 抽象类 | 接口 |
---|---|---|
构造函数 | 随意 | 无 |
继承性 | 单继承 | 多继承 |
成员变量 | 随意 | 无 |
方法 | 普通成员方法 虚方法 抽象方法 静态方法 | 抽象方法 |
访问修饰符 | 可 | 建议不写 默认 public |