1.值类型和引用类型
- 值类型:int、double、bool、char、decimal、struct、enum
- 引用类型:string、自定义类、数组
- 值类型全部存储在栈中,
- 引用类型的值存储在堆中,引用地址则存储在栈中;
- 在传递时,传递的方式不一样;
2.字符串
- 字符串的不可变性(堆中重新开辟一份空间);
- 字符串可以看做是char类型的一个只读数组 string.ToCharArray()
3.StringBuilder
- 创建计时器:StopWatch Elapsed方法,记录总的时间;
- 没有在内存中开空间,之后在调用ToString()方法,将其转换为string类型
- 提供了Append方法,能够在已有对象的原地进行字符串的修改,简单直接
4.字符串的方法:
- Length()
- ToUpper/ToLower()
- Equals()
- Split(new char[]{'-'},StringSplitOptions.RemoveEmptyEntries)
- bool Contains()
- Replace()
- Substring(index,count)截取字符串
- bool StartWith/EndWith()
- int IndexOf()/LastIndexOf(),没有则返回-1
- Trim()/TrimStart()/TrimEnd()
- IsNullOrEmpty()
- Join() 用指定的连接符连接字符数组
5.File
- ReadAllLine(path,Encoding Default)
6.类的继承
- 我们可能会在一些类中,写一些重复的成员,我们可以将这些重复的成员,单独的封装到一个类中,作为这些类的父类;
- 子类(派生类)--父类(基类)
- 子类继承了父类的属性和方法,但没有继承父类的私有字段,若为(protected)则可以使用;
- 子类并没有继承父类的构造函数,依赖于父类的无参是构造函数;
- 创建子类对象时,会首先执行父类的无参的构造函数,然后在执行子类自己的构造函数,执行构造函数,则说明创造了父类的
- 子类的内部创建了一个父类的对象,从而使用父类中的成员,如果重新写一个有参数的父类构造函数,那这个无参的构造函数就没有了;
- 在父类中重新写一个无参数的构造函数
- 在子类中显示的调用父类有参数的构造函数,使用关键字 :base()
- 继承的两个特性:
- 单根型:一个子类只能有一个父类
- 传递性:多级传递
- Object类:是一切类的基类
- new关键字:
- 创建一个新的对象
- 隐藏父类继承过来的重名方法或重名成员。