VR_C#拒绝摸鱼第九天

102 阅读4分钟

一. 接口

1. 接口的使用

  • 接口中的函数都不需要修饰符 默认都是公开的 image.png

  • 接口中可以放方法,属性(只能用自动属性就是简写模式),索引器,这些的本质其实还是函数

  • 因为接口中的函数都是没有实现的,所以接口是不能实例化的

  • 类可以继承多个,接口可以继承多个其他接口

image.png

image.png

  • 实现接口

image.png

继承多个类和接口时要把类写在前面

image.png

问:类中有和接口中同名的函数,那么在继承接口的时候,类中的同名函数会被认为是实现接口中的函数,但是我们就想区分出来,另外去实现接口中的函数怎么办呢?

解: 使用接口名.函数名 实现接口中的函数 image.png

image.png

二.File类处理小文件的读写

1. 逐行读取文件中的信息到字符串数组中

    string[] fsRead = File.ReadAllLines("./1.txt", Encoding.UTF8);
    foreach(string i in fsRead)
    {
        Console.WriteLine(i);
    }

"./"表示当前项目相对地址,"1.txt"为访问文件名,Encoding.UTF8位字符格式

2.读取文件中的信息到字符串中

string fstr = File.ReadAllText("./1.txt");
Console.WriteLine(fstr);

3.向文件中写入信息(覆盖形式)

string fwrite = "\n32131kujjkjsncjk";
File.WriteAllText("./1.txt",fwrite);

4.向文件中写入信息(追加的形式)

File.AppendAllText("./1.txt", "jbkdas很快");

5.向文件中一行一行写入信息

string[] fw = { "坚持住", "很快就可以吃饭了" };
File.AppendAllLines("./1.txt", fw);//一行一行输入

三.泛型类

1. 定义泛型

    public class BMI<T>//定义了一个泛型类  T相当于一个变量,创建对象时就可以规定为其他类型
    {
        public T weight;
        public T high;
        public string name;

        public BMI(T weight, T high, string name)//构造函数
        {
            this.weight = weight;
            this.high = high;
            this.name = name;
        }

        public T getBMI()
        {//泛型数据不可进行简单的加减,需要借助dynamic动态类型数据来存值
            dynamic weight1 = weight;//动态类型变量
            dynamic high1 = high;
            return (T)(weight1 /( high1*high1));
        }
    }
    

创建对象时,定义要传递泛型的类型

double weight = Convert.ToDouble(Console.ReadLine());
double high = Convert.ToDouble(Console.ReadLine());
BMI<double> hahaha = new BMI<double>(weight,high,"hahaha");

四.列表

1.列表作用

  • 列表方便随意添加删除数据,而数组长度是固定的。
  • 列表相当于一个动态的存储空间,内存空间会根据元素个数进行扩展。
  • 如果元素的个数为0,则容量为0,若小于等于4,则容量为4,若大于4小等于8,则容量为8,容量是翻倍扩展的

2.列表的定义

泛型列表

image.png

3.基本使用

  • 往列表最后添加新的值

      list.Add(13);
    
  • 在指定位置插入元素(下标位置,元素)

      list.Insert(0, 0);
    
  • 删除指定元素

      list.Remove(1);
    
  • 获取列表元素个数

      list.Count();
    
  • 获取列表实际的长度也就是容量

      list.Capacity();//当元素个数是0的时候,初始容量也为0,当元素个数小于等于大于0的时候容量为4,此后如果添加元素超过总容量的时候,那么将容量翻倍。
    
  • 删除指定下标的元素

      list.RemoveAt(list.Count-1);
    
  • 查找元素在列表中第一次出现的下标位置,若无则返回-1

      list.IndexOf(0);
    
  • 从后往前查找指定元素的下标位置,若无则返回-1

     list.LastIndexOf(34);
    
  • 将一整个列表添加到另一个列表中,将改变原来列表

      list.AddRange(list1);
    
  • 删除从指定位置开始的指定元素个数,前一个为删掉起始位置,后一个为删除元素个数

      list.RemoveRange(0,3);
    

4.练习题

将一个数组中的奇数放到一个集合中,再将偶数放到另一个集合中,最终将两个集合合并为一个集合,并且奇数显示在左边,偶数显示在右边

List<int> list = new List<int>() { 1, 2, 3, 4, 5, 6, 7, 8, 9 };
List<int> list1 = new List<int>();
List<int> list2 = new List<int>();
foreach(int i in list)
{
    if (i % 2 == 0)
        list2.Add(i);//添加偶数元素
    else
        list1.Add(i);//添加奇数元素
}
foreach(int i in list1)//遍历奇数元素
    Console.Write(i+" ");
Console.WriteLine();
foreach (int i in list2)//遍历偶数元素
    Console.Write(i + " ");
Console.WriteLine();
list1 = list1.Concat(list2).ToList();//将偶数合并到奇数列表中
foreach(int i in list1)
    Console.Write(i + " ");

五.字典Distionary

字典中存放的是一组组键值对,键和值都是一一对应的。

1.字典定义

Dictionary<int, string> dic = new Dictionary<int, string>();//<>尖括号里为泛型类型,此处定义键为int型,值为字符串

2.添加元素

dic.Add("name", "hhh");//dic.Add("键名","值");

3.查找

Console.WriteLine(dic["name"]);//通过键名读取字典中的值
Console.WriteLine(dic.ContainsKey("name1"));//判断字典是否有对应的键名,返回一个bool值,Contains包含
Console.WriteLine(dic.ContainsValue("hhh"));//判断字典是否有对应的值

4.遍历

  • 遍历键和值

      foreach(KeyValuePair<string,string> kv in dic)//KeyValuePair键值对
      {
          Console.WriteLine("键为{0},值为{1}",kv.Key, kv.Value);//获取键值对
      }
    
  • 遍历-----键

      foreach(string k in dic.Keys)
      {
          Console.WriteLine("键----{0}",k);//拿到所有的键
      }
    
  • 遍历-----值

      foreach (string v in dic.Values)
      {
          Console.WriteLine("键----{0}", k);//拿到所有的值
      }
    

5.合并两个字典

dic1=dic1.Concat(dic2).ToDictionary(x=>x.Key,y => y.Value );//a=>x 相当于传进来的a值  return x   将dic2的内容合并到dic1中

6.练习题一

使用字典的方式计算出任意字符串中每个字符出现的次数

string str = Console.ReadLine();
Dictionary<char, int> dic = new Dictionary<char, int>();
foreach(char c in str)
{
    if(dic.ContainsKey(c))//如果dic中有输入的字符,则该对应字符的键的值++
        dic[c]++;
    else//没有该字符,则加入该字符的键
        dic.Add(c, 1);
}
foreach(char c in dic.Keys)//遍历
{
    Console.WriteLine("{0}=>{1}", c,dic[c]);
}