C#面向对象基础2

1.里氏转换:

子类可以赋值给父类

如果父类创建的是子类对象,那么可以将父类强制转换为子类

Is可以判断一个类的对象是不是某一个类的对象兼容(p is class2)//返回bool类型

As (p as class2) p可以转换class2就返回class2对象,否则返回NULL

C#中子类实现父类的抽象方法的时候,需要在方法前面加上override才可以实现重写实现!!!!(此时父类可以直接调用子类实现的抽象方法)

注意:如果父类要调用自己的非抽象方法(实例化的是子类),那么必须将自己的类型强转为子类

  1. 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;

装箱与拆箱的过程是很损耗性能的。

注意:如果不存在继承的关系,那么还是有可能存在装箱与拆箱的造作。(大多不存在,接口在某意义上也算“继承”)

  1. Hastable 键值对集合

例如:

Hastable ht = new Hastable();

Ht.add();//也可以通过ht[“value”] = 数值进行赋值

(效率比for高很高!!!!)Foreach(var item in ht)或者foreach(var item in ht.key)//item是键,ht[item]为值

  1. Path方法的使用

Path.GetFileName(str);//获取文件名

Path.GetFileNameWithoutExtension(str);//获取文件名但不带后缀

Path.GetExtension(str);//获得文件的扩展名(后缀)

Path.GetDirectoryName(str);//获得文件所在的文件夹名称

Path.GetFullPath(str)//获得文件的全路径

<u>Path.Combine(@</u><u>“</u><u>c:\a</u><u>”</u><u>,</u><u>”</u><u>b.txt</u><u>”</u><u>);//连接两个字符作为路径</u>

  1. 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)//一次获取一对数据,并且获取到数组型数组可以继续用循环输出

  1. 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调用语句},这样系统会自动帮我们关闭

  1. streamreader与streamwriter(操作文本)

Steram与File不同的是:file读取都是变成字节,这个直接是字符串

Steamreader sr = new streamreader(path,Encoding.Default);

SteamWriter sw = new streamWriter(path,true,Encoding,Default);

  1. 访问修饰符总结

Public :完全公开的

Private:私有的,只能在当前类内部访问

Protected:受保护的,只能在当前类以及子类中访问

Internal:在当前项目中访问

Protected internal:protected + internal(在同一个项目中,遵循internal的访问规则,在不同项目中遵循protected的访问规则(只能访问类以及子类))

  1. (存储在堆上)引用类型的数值问题(string会因为不可变性,每次赋值都会新创建对象开辟空间,不会有此问题)

int[] a ={ 1,2,3};

        int[] b;

b = a;

        b[0] = 18808;

        Console.WriteLine(a[0]);

这样会因为改变的地址上的值从而改变a[0]的值

值类型则无此问题

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容