专业的编程技术博客社区

网站首页 > 博客文章 正文

C#学习笔记9(新人必看!)(c#入门基础)

baijin 2024-10-15 08:30:46 博客文章 11 ℃ 0 评论

C#是当前在.Net开发环境下一种十分易于使用的语言,这门语言上手容易,语法简单,那么接下来就展示一些学习这门语言中的笔记吧!本合集将要要学习的内容提炼为11天,本篇是第九天的内容,11天成为C#程序员,就是这么简单!

9 .Net学习第九天

9.1 里氏转换

子类可以赋值给父类

如果有一个地方需要一个父类对象作为参数,我们可以给一个子类对象代替

Student s = new Student();
Person p = s;

如果父类中装的是子类对象,那么可以将这个父类对象强转为子类对象

对于一个父类下的不同子类的对象,可以使用一个父类数组来存放这些子类对象

is类型转换,成功返回true,失败返回false

as类型转换,成功返回对应对象,失败返回null

9.2 集合

9.2.1 ArrayList

集合的特点:

集合的长度可以任意改变

集合的类型可以随意

ArrayList List = new ArrayList();
  • List.Add添加单个元素
  • List.AddRange添加集合元素
  • List.Clear清空集合元素
  • List.Remove删除单个元素
  • List.RemoveAt删除指定位置元素
  • List.RemoveRange删除指定下标区间的元素
  • List.Sort升序排列
  • List.Reverse反转
  • List.Insert在指定位置插入指定元素
  • List.InsertRange在指定位置插入一个集合
  • List.Contains判断是否包含指定元素

ArrayList的长度可变,其Count属性表示集合实际包含的元素个数,Capacity属性表示集合可包含的元素个数,当Count属性高于Capacity属性时,集合就会向内存中多申请一倍的空间来保证集合的长度够用

9.2.2 Hashtable

键值对集合

Hashtable ht = new Hashtable();

ht.Add(键,值)

调用时,是根据下标的键找到集合中的值

使用foreach循环调用

foreach (var item in ht.Keys)
{
  Console.WriteLine("键是{0},值是{1}", item, ht[item]);
}

9.2.3 泛型集合

List<int> list = new List<int>();

泛型集合提供的方法与ArrayList相同

但是泛型集合在实例化时就指定了该泛型集合的类型

在进行Add操作时,只能加入指定类型的元素,因此也不会发生装箱操作

9.2.4 Dictionary

键值弱集合

Dictionary<int, string> dic = new Dictionary<int, string>();

键值弱集合的使用方式与Hashtable相同,但是在建立集合时就指定了键与值的类型

KeyValuePair<int, string>

9.3 Path类

Path类是路径类,提供了一系列对文件路径操作的方式

  • GetFileName获取文件名
  • GetFileNameWithoutExtension获取不包含扩展名的文件名
  • GetExtension获取文件的扩展名
  • GetDirectorName获取文件所在文件夹的路径
  • GetFullPath获得文件所在全路径
  • ComBine将两个字符串组成一个路径

9.4 File类

操纵文件的类

  • Create创建一个文件
  • Delete删除一个文件
  • Copy复制一个文件到另一个文件
  • WriteAllBytes写入
  • ReadAllBytes读取
  • ReadAllLines返回字符串数组
  • ReadAllText返回字符串
  • WriteAllLines写入行以字符串数组形式写入每一行
  • WriteAllText写入一个字符串
  • AppendAllText追加写入一个字符串

9.5 FileStream类

FileStream 对象名 = new FileStream(文件路径, FileMode.操作方式);
FileStream fsRead = new FileStream(@"C:\Users\...", FileMode.OpenOrCreat);
byte[] buffer = new byte[1024*1024*5];
int r = fsRead.Read(buffer, 0, buffer.Length);
string s = Encoding.Default.GetString(buffer, 0, r);
fsRead.Close();
fsRead.Dispose();
Console.WriteLine(s);
Console.ReadKey();

在using中使用文件流可以帮助我们释放流所占用的资源

using(FileStream fsWrite = new FileStream(@"C:\Users\...", FileMode.Append))
{
  string str = "123";
  byte[] buffer = Encoding.Default.GetBytes(str);
  fsWrite.Write(buffer, 0, buffer.Length);
}
Console.ReadKey();

9.6 多态

让一个对象能表现出多种状态

实现多态的手段

9.6.1 虚方法

使用关键字virtual将父类的方法标记为虚方法

这个函数可在子函数中方法用关键字override将同名方法标记作为重写方法

9.6.2 抽象类

当父类中的方法不知道如何实现的时候,可以考虑将父类写成抽象类,将方法写成抽象方法

使用关键字abstract将父类标记为抽象类

使用关键字abstract将父类中的方法标记为抽象方法,必须没有方法体和{}

使用关键字override在子类中重写这个方法

抽象类的注意事项

抽象成员必须标记为abstract

抽象成员必须在抽象类中

抽象类不能被实例化

子类继承抽象类后,必须把该父类的所有抽象对象重写

抽象成员的访问修饰符不能是private

抽象类是有构造函数的

如果父类的抽象方法有参数,那么子类在重写时必须传入参数

如果父类的抽方法有返回值,那么子类在重写时必须传回返回值

9.7 访问修饰符

public:公开的,能被所有成员访问的

private:私有的,只能被类内成员访问的

protected:受保护的,只能被类内成员以及子类访问的

internal:只能被当前程序集访问的

protected internal:

能够修饰类的访问修饰符:public、internal(子类的访问权限不能高于父类的访问权限)

Tags:

本文暂时没有评论,来添加一个吧(●'◡'●)

欢迎 发表评论:

最近发表
标签列表