01. 类的基本定义
[public] class 类名{
}
在类中,this : 表示当前类的实例化对象;
类是不占内存的,但类的实例化对象是占内存的;
02. 字段、属性、方法
字段:用于描述一个类的相关特征的信息,在C#中,一般使用 _小写字母 表示; (相当于Delphi中的 private XXXX;)
如: private String _name; private int _age;
字段在赋值时,无任何约束,有可能会产生一些无意义的内容;
如: xxx._age = -10; 年龄赋值-10,是不符合实际应用规则的;
属性:是对字段的一种封装,是对特定字段上一些规则的应用;
1 publi String Name{get;set;} 2 3 public int Age{ 4 5 get{ return _age;} 6 7 set{ 8 9 if(value>0){ 10 11 _age = value; 12 13 } 14 15 } 16 17 }
当有相关约束时,可以在相应的 get函数,或set函数中进行配置处理
相当于Delphi中的 property
03.关于静态与非静态的区别
a. 在非静态类中,既可以实例成员,也可以有静态成员;
b. 在调用实例成员的时候,需要使用对象名.实例成员;
在调用静态成员的时候,需要使用类名.静态成员名;
>> 静态成员必须使用类名去调用,而实例成员使用对象名调用;
静态函数中,只允许访问静态成员,不允许访问实例成员;
实例函数中,既可以使用静态成员,也可以使用实例成员;
>> 静态类不允许实例化;
静态类在整个项目中资源共享;
04.构造方法
public 类名(){ }
>> 构造函数,必须为 public , 无返回值,连 void 也不行;
构造函数的名称,必须和类名一样;
构造函数可以重载;
>>类中未写构造函数时,系统默认配置一个无参构造函数;
当类中写了构造函数后,系统将不再默认提供无参构造函数;此时若再需要无参构造函数,需要自行写入一个;
05. this 关键字
>> 构造函数调用另外一个构造函数
>> 析构函数 (如果不配置檄构函数,系统资源将由GC回收资源)
06.值类型 和 引用类型
区别:
1. 值类开和引用类型在内存上存储的地方不一样;
2. 在传递值类型和传递引用类型的时候,传递的方式不太一样;
值类型我们称之为值传递,引用类型我们称之为引用传递;
值类型:
int, double, bool, char, decimal, struct, enum;
值存储在栈中;
引用类型:string, 自定义类、数组..
值存储在堆中;
>>实时监测窗口调出
>> 快速给字段生成属性
>>字符串与数组的转换:
>>字符串的一些方法
1 //转大写 2 ck = a.ToUpper(); 3 //转小写 4 ck = a.ToLower(); 5 //取长度 6 int c = a.Length; 7 //是否相同比较,区分大小写 8 flag = a.Equals(b); 9 //是否相同比较,不区分大小写 10 flag = a.Equals(b, StringComparison.OrdinalIgnoreCase); 11 //分割字符串 12 //.折分标准 13 char[] chs = { ' ', '_', '+' }; 14 //拆分后,返回的数组中,拆分标位对应位置会返回空字符串"" 15 string[] str = a.Split(chs); 16 //拆分后,拆分标准会被清理掉,只保留有效字符 17 str = a.Split(chs, StringSplitOptions.RemoveEmptyEntries); 18 //字符串替换 19 a = a.Replace("原内容", "新内容"); 20 //字符串取子串 (开始位,子串长度): 从指定位置开始取指定长度子串,若不写长度,默认从指定位置开始到结束 21 a.Substring(0, a.Length - 1); 22 //判断是否以XX开始 23 flag = a.StartsWith("开始内容"); 24 //判断是否以XX结束 25 flag = a.EndsWith("结束内容"); 26 //判断是否包含xx 27 flag = a.Contains("内容"); 28 //从开始位取首个匹配点 29 c = a.IndexOf("内容"); 30 //从结束位开始取首个匹配点 (参数2为含量量,匹配时包括这个位置),无匹配时返回-1 31 c = a.LastIndexOf("内容", 1); 32 //去空 33 b = a.Trim(); 34 b = a.TrimStart(); 35 b = a.TrimEnd(); 36 //判断是否为空 37 flag = string.IsNullOrEmpty(ck); // null, "" 返回true, 否则false 38 flag = string.IsNullOrWhiteSpace(ck); // null, "", " " 都返回true, 否则为false; 39 //字符串连接 40 b = string.Join("|", "张三", "李四", "王五", "赵六");
07. 继承
public class 子类: 父类{ }
特性:
继承的单根性:一个子类只能有一个父类;
继承原传递性;
>> 子类调用父类的构造函数
>> new 关键字的作用
* 实例化对象
* 隐藏从父类中继承过来的同名成员;
--> 隐藏的结果:子类调用不到父类的成员;
08. 里氏转换
>> 子类可以赋值线父类;
>> 如果父类中装的是子类,可以将这个父类强制转换为子类对象;
>> is : 判断一个对象是否是某个类型的对象; 如果是,则返回 True, 否则 返回 False
>> as: 将一个对象转换为某个类型的对象; 如果能转换,返回对应类型的对象,否则返回 null;
09. 集合 ArrayList
>> 长度可以改变,类型可以自定义;
>> ArrayList 的创建及一些方法
10. HashTable 键值对的集合
11. Path 类
12.File 类
文件操作 类;
>> 编码转换
1 static void Main(string[] args) 2 { 3 String ki = ""; 4 String chgInfo = "A张三,你好呀a"; 5 String ckinfo = ""; 6 7 Encoding fromE= Encoding.GetEncoding("utf-8"); 8 Encoding toE = Encoding.GetEncoding("gb2312"); 9 10 byte[] fromB = fromE.GetBytes(chgInfo); 11 byte[] toB = Encoding.Convert(fromE, toE, fromB); 12 13 for (int i = 0; i < fromB.Length; i++) 14 { 15 if (ckinfo == "") 16 { 17 ckinfo = fromB[i].ToString(); 18 } 19 else 20 { 21 ckinfo = ckinfo +"," + fromB[i].ToString(); 22 } 23 } 24 Console.WriteLine(ckinfo); 25 26 27 ckinfo = ""; 28 for (int i = 0; i < toB.Length; i++) 29 { 30 if (ckinfo == "") 31 { 32 ckinfo = toB[i].ToString(); 33 } 34 else 35 { 36 ckinfo = ckinfo + "," + toB[i].ToString(); 37 } 38 } 39 Console.WriteLine(ckinfo); 40 41 Console.ReadKey(); 42 }
>> File的读取操作
>> List<T> 泛型
>> Dictionary<键类型,值类型>;
>> FileStream: 文件流; > 操作字节
*> 可以使用 using(){ } 来实现自动释放;
>> StreamReader 和 StreamWriter : 对文本文件的处理
> StreamReader: 返回字符串
文件尾部识别: StreamReader.EndOfStream;
13. 多态
>>实现多态的三种方法:
a. 虚方法;
> 将父类方法,标记为虚方法;
父类中标识: public virtual void doTask(); 虚方法,允许有方法体;
子类中重写: public override void doTask(); 如果不重写,调用的,仍然是父类的方法;
b. 抽象类;
> 将一个类标识为抽象类: public abstract class xxxx;
> 类中的方法,标识为抽像方法; public abstract void doTask(); 抽像方法没有方法体;
> 实现类继承抽象类,在实现类中对方法重写,完成真实的业务处理; public override void doTask();
c. 接口;