一. 接口
1. 接口的使用
-
接口中的函数都不需要修饰符 默认都是公开的
-
接口中可以放方法,属性(只能用自动属性就是简写模式),索引器,这些的本质其实还是函数
-
因为接口中的函数都是没有实现的,所以接口是不能实例化的
-
类可以继承多个,接口可以继承多个其他接口
- 实现接口
继承多个类和接口时要把类写在前面
问:类中有和接口中同名的函数,那么在继承接口的时候,类中的同名函数会被认为是实现接口中的函数,但是我们就想区分出来,另外去实现接口中的函数怎么办呢?
解:
使用接口名.函数名 实现接口中的函数
二.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.列表的定义
泛型列表
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]);
}