1.里氏转换:
子类可以赋值给父类
如果父类创建的是子类对象,那么可以将父类强制转换为子类
Is可以判断一个类的对象是不是某一个类的对象兼容(p is class2)//返回bool类型
As (p as class2) p可以转换class2就返回class2对象,否则返回NULL
C#中子类实现父类的抽象方法的时候,需要在方法前面加上override才可以实现重写实现!!!!(此时父类可以直接调用子类实现的抽象方法)
注意:如果父类要调用自己的非抽象方法(实例化的是子类),那么必须将自己的类型强转为子类
- ArrayList(存在装箱拆箱)
List<>
List.count来获得list的长度
List.capacity表示集合可以包含的长度(如果集合为空则与count一样都为0,如果有则比count多1,因为需要下一个空间继续来存储其他数据)
添加单个元素用list.Add()
添加集合用List.AddRange()
删除所有元素list.clear()
删除单个元素list.remove()
删除索引下标元素List.removeat()
删除索引范围内元素List.removeRange()
List.sort要注意列表内元素要可以排序
List.reverse();翻转元素的存储顺序
List.insert(1,”插入的”);在指定的位置插入一个元素
List.insertRange(0,new string[] {“白酱”,”吉普利尔酱”})//数组内一个元素站一个位置(下标),如果用ADD那么整个数组都会在一个下标里面
3.装箱:就是将值类型的数据打包到引用类型的实例中
比如将int类型的值123赋给object对象o
int i=123;object o=(object)i;
拆箱:就是从引用数据中提取值类型
比如将object对象o的值赋给int类型的变量i
object o=123;int i=(int)o;
装箱与拆箱的过程是很损耗性能的。
注意:如果不存在继承的关系,那么还是有可能存在装箱与拆箱的造作。(大多不存在,接口在某意义上也算“继承”)
- Hastable 键值对集合
例如:
Hastable ht = new Hastable();
Ht.add();//也可以通过ht[“value”] = 数值进行赋值
(效率比for高很高!!!!)Foreach(var item in ht)或者foreach(var item in ht.key)//item是键,ht[item]为值
- Path方法的使用
Path.GetFileName(str);//获取文件名
Path.GetFileNameWithoutExtension(str);//获取文件名但不带后缀
Path.GetExtension(str);//获得文件的扩展名(后缀)
Path.GetDirectoryName(str);//获得文件所在的文件夹名称
Path.GetFullPath(str)//获得文件的全路径
- File(读小文件)
[<u>File.Create(</u><u>@"E:\C#\面向对象\读取文件练习2.txt"</u><u>);</u>](mailto:File.Create(@)
[<u>File.Delete(</u><u>@"E:\C#\面向对象\读取文件练习2.txt"</u><u>);</u>](mailto:File.Delete(@)
[<u>File.Copy(</u><u>@"E:\C#\面向对象\读取文件练习2.txt"</u><u>,</u><u>@"E:\C#\面向对象\读取文件练习</u><u>3</u><u>.txt"</u><u>);</u>](mailto:File.Copy(@)
以字节形式存储是为了文件流打基础(暂时也可以用readAllLine)
File.WriteBytes(path,byte[]);//byte[] a = Encoding.Default.GetBytes(str);//存储字符串(以字节的形式)到文件中
Byte[] a = File.ReadAllBytes(path);//读取文件字节
String b = Encoding.Default.GeyString(a);//并转化成字符串
使用相对路径需要将文件与程序放在同一目录下
List<int[]> list = new List<int[]>;//只有这样才可以添加数组,并且按照下标访问数组里面的元素
并且list.toArray()与变量.toList()可以进行对应类型的互换
7.Dictionary
需要实现定义类型
Dictionary<string,string[]> dic = new Dictionary<string,string[]>();
Foreach(KeyValuePair<string,string[]> kv in dic)//一次获取一对数据,并且获取到数组型数组可以继续用循环输出
- FileStream
FileStream fs = new FileStream(path,FileMode.OpenOrCreat,FileAccess.Read);
Int count = fs.Read(buffer[],0,buffer.Length);//读取的数据暂存的数组,读取的位置,每次读取的最大大小,返回实际读取的字节数存到count中
注意:
其中read,openorcreate都是可以替换的,并且FS.write使用的参数相同
每次使用时候需要手动关闭fs.close();fs.dispose()//可以将filestream创建对象的语句using(放在这){filestream调用语句},这样系统会自动帮我们关闭
- streamreader与streamwriter(操作文本)
Steram与File不同的是:file读取都是变成字节,这个直接是字符串
Steamreader sr = new streamreader(path,Encoding.Default);
SteamWriter sw = new streamWriter(path,true,Encoding,Default);
- 访问修饰符总结
Public :完全公开的
Private:私有的,只能在当前类内部访问
Protected:受保护的,只能在当前类以及子类中访问
Internal:在当前项目中访问
Protected internal:protected + internal(在同一个项目中,遵循internal的访问规则,在不同项目中遵循protected的访问规则(只能访问类以及子类))
- (存储在堆上)引用类型的数值问题(string会因为不可变性,每次赋值都会新创建对象开辟空间,不会有此问题)
int[] a ={ 1,2,3};
int[] b;
b = a;
b[0] = 18808;
Console.WriteLine(a[0]);
这样会因为改变的地址上的值从而改变a[0]的值
值类型则无此问题