复习
```/*using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace test1
{
internal class 第十二课
{
public class M // 基本类
{
// 构造方法
public M(int num1)
{
m_num = num1;
}
//字段
public int m_num;
public int num=1;
public static int num2=2;
//属性
public string str
{
get; // 没有赋值相当于是字段
set;
}
// 函数
static public void getnum()
{
Console.WriteLine(num2); //静态方法只能访问静态的成员
}
public virtual void show()
{
Console.WriteLine("父类"); //虚方法
}
public new void show2()
{
Console.WriteLine("隐藏父类"); // 隐藏父类
}
}
class M1 : M // 子类继承
{
//构造
public M1(int num, string str1) : base(num)
{
this.str = str1;
}
public override void show()
{
Console.WriteLine("子类"); // 重写父类的虚方法
}
public void show2()
{
Console.WriteLine("隐藏子类"); // 重写父类的虚方法
}
public string str;
}
static void Main(string[] args)
{
// 面向对象 继承多态封装
// 多肽 虚函数(在派生类对基本类的函数进行重写 ) 隐藏方法 给基类的函数加上new
M m = new M(1); // 字段有默认值0
Console.WriteLine(m.num);
M.getnum(); //静态方法使用方法
// 子类创建实例
M1 m2=new M1(2,"s");
m2.show();
m2.show2();
Console.WriteLine(m2.num);
}
}
}
*/
文件类
```js/*using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace test1
{
internal class 第十二课_file类
{
static void Main(string[] args)
{
//c#本质在学什么,各种类库的使用
//File类,读写文件―整个文件信息一次性全部读取过来|
string str = File.ReadAllText("./1.txt",Encoding.UTF8); //'绝对路径相对路径拿到所有的文本信息
Console.WriteLine(str);
// 读取所有整行的信息 放进数组中去
string[] strArray = File.ReadAllLines("./1.txt");
foreach(string i in strArray)
{
Console.WriteLine("第i行"+i); //打印每一行的信息
}
//添加信息 两种 追加 替换 (默认);
File.WriteAllText("./1.txt","替换的内容 ");
string[] str3 = { "1", "2", "3", "4" };
File.AppendAllLines("./1.txt", str3);
//追加
File.AppendAllText("./1.txt","\n在末尾追加的内容");
}
}
}
*/
接口、
```/*
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace test1
{
public class Animal
{
public void sleep()
{
Console.WriteLine("睡觉");
}
}
public interface Flyable
{
int num { get; set; } //里面的get set 实质上是没有函数提的函数
void fly (); // 默认都是public ;
void skating();
}
public interface Eat
{
void eat();
}
//一个接口集成多个接口
public interface SuperFace : Flyable, Eat { }
public interface SuperFace2 : Flyable, Eat { } // 接口细分,可以套更多的接口
class bird : Animal,Flyable,Eat // 类和接口同时存在时 吧类放在前面上
{
private int num1;
int Flyable.num { get => num1; set { num1 = value; } }
// set 不需要返回值 ( =》输出返回值)
// 有重名时
*//* void Flyable. fly()
{
Console.WriteLine("飞");
}
void Flyable.skating()
{
Console.WriteLine("滑行");
}
void Eat.eat()
{
Console.WriteLine("吃");
}*//*
//没有重名
public void fly()
{
Console.WriteLine("飞");
}
public void skating()
{
Console.WriteLine("滑行");
}
public void eat()
{
Console.WriteLine("吃1");
}
void Eat.eat()
{
Console.WriteLine("吃2");
}
internal class 十二课_接口
{
static void Main(string[] args)
{
bird b1 = new bird();
Eat.eat();
}
}
}
}
*/
泛型类
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.IO;
namespace test1
{
public class MYmath<T> // 创建一个泛型类 t的类型由创建对象的时候决定、
{
public T GetNum(T num1,T num2)
{
//return =num1+num2 //不能相加 因为 t 的类型没有确定
//定义一个动态的 变量
//动态类型 可以将泛型的值赋给动态类型的量这样就可以进行运算操作
dynamic num3 = num1;
dynamic num4 = num2;
return num3+num4;
}
}
internal class 第十二课_泛型类
{
static void Main(string[] args)
{
/* MYmath<int> math = new MYmath<int>();
MYmath<string> math2 = new MYmath<string>();
Console.WriteLine(math2.GetNum("string","abs1"));
Console.WriteLine(math.GetNum(123,345));*/
//集合类 列表 ,集合 ,栈,线性表
//列表 之前学的数组 有什么问题。
// 定义一个泛型列表
/* List<int> list = new List<int>() { 1, 2 };//0括号是指定容量 元素长度cout 列表的容量capacity
Console.WriteLine(list.Count); //如果没有值的话 原元素个数就是0;
Console.WriteLine(list.Capacity); //列表的容量是翻倍增长的
list.Add(45); //1末尾添加
Console.WriteLine(list[2]);
Console.WriteLine(list[list.Count - 1]);// 2读取最后一个的值
list.Insert(0, 5); //3在下标0的位置上插入5;
Console.WriteLine(list[0]);
list.RemoveAt(0); //4删除指定下标的元素
int[] intarrary = { 0, 0, 0 };
list.AddRange(intarrary); //5利用数组循环添加
foreach (int i in list)
{
Console.WriteLine("元素{0}", i);
}
// 集合类 字典 键 和值
Dictionary<string, string> dic = new Dictionary<string, string>(); //一个键一个值
dic.Add("name", "麻辣王子"); //前面表示键名 ,后面表示值
Dictionary<string, string> dic2 = new Dictionary<string, string>();
dic.Add("name2", "小明");
//转成字典类型 后合并后成一个字典 ;
dic = dic.Concat(dic2).ToDictionary(x => x.Key, y => y.Value);
foreach (string k in dic.Keys) //遍历名
{
Console.WriteLine("键为{0}", k);
}
foreach (string k in dic.Values) //遍历值
{
Console.WriteLine("值为{0}", k);
}
foreach (KeyValuePair<string,string> k in dic) //遍历键值对 keyvaluepair
{
Console.WriteLine("键为{0},值为{1}",k.Key,k.Value);
}
Console.WriteLine(dic.ContainsValue("麻辣王子"));// 查找是否存在 可以查看是否纯在的用户名
//1.练习一:将一个数组中的奇数放到一个集合中,再将偶数放到另一个集合中,
// 最终将两个集合合并为一个集合,并且奇数显示在左边,偶数显示在右边
int[] intarr = {1,3,4,5,6,7,8,9,10};
List<int> list1 = new List<int>();
List<int> list2 = new List<int>();
foreach (int i in intarr)
{
if (i % 2 != 0) // 如果是奇数的话
{
list1.Add(i);
}
else
{
list2.Add(i);
}
}
list1=list1.Concat(list2).ToList(); // 合并两个列表
foreach(int i in list1)
{
Console.WriteLine(i);
}
// 2.练习二:使用字典的方式计算出任意字符串中每个字符出现的次数
// maddfdfmdf m
string str01 = "maddfdfmdf ";
Dictionary<char, int> dic01 = new Dictionary<char, int>(); //一个键一个值
foreach (char i in str01)
{
if(dic01.ContainsKey(i))//判断字典重有没有对应的键名
{
dic01[i]++; // 值加一
}
else
{
dic01.Add(i, 1); //如果没有则初始化
}
}
foreach (KeyValuePair<char,int>k in dic01)
{
Console.WriteLine("字符为{0}出现次数为{1}",k.Key, k.Value);
}*/
// 大文件读取方式 FileStream文件流读取到的是字节,可以读取所有的文件
FileStream fsRead = new FileStream("./2.txt", FileMode.OpenOrCreate, FileAccess.Read);
// FileMode.OpenOrCreate, 如果文件不存在则创建
// FileAccess.Read 读的形式打开
byte[] fsByte = new byte[1024*1024*4]; //规定读取最大的字节长度
//开始读取文件 读取完返回的是实际读取到的字节数
int rNum = fsRead.Read(fsByte);
//根据字节数 , 将读取到的字节转换为字符串
string a=Encoding.UTF8.GetString(fsByte,0,rNum);
Console.WriteLine(rNum);
Console.WriteLine(a);
fsRead.Close(); // 关闭文件
fsRead.Dispose();// 释放所占的资源
// 写入 替换 追加
using (FileStream fdWrite =new FileStream("./2.txt",FileMode.Append,
FileAccess.Write))
{
string b = "123456";
//将字符串转化为字节
byte[] fdByte =Encoding.UTF8.GetBytes(b);
fdWrite.Write(fdByte); //将文件信息使用追加的形式写入文件中
}
using (FileStream fdWrite = new FileStream("./2.txt", FileMode.Create,
FileAccess.Write))
{
string b = "123456";
//将字符串转化为字节
byte[] fdByte = Encoding.UTF8.GetBytes(b,0,4);
fdWrite.Write(fdByte); //将文件信息使用替换的形式写入文件中
}
// 读取的是字符串
StreamReader fileRead = new StreamReader("./3.txt",Encoding.UTF8);
/* string fileSting = fileRead.ReadLine() ;// 读取每一行的信息
string allText = fileRead.ReadToEnd(); // 读取所有行的信息
char fileChar =(char) fileRead.Read();// 读取字符
Console.WriteLine(fileSting);
Console.WriteLine(allText);*/
// Console.WriteLine((char)fileRead.Read()); //逐个逐个去读取 ,
//有的话就返回该字符的十进制
//没有就返回-1
fileRead.Close(); //关闭文档流
//写入信息
/* StreamWriter fileWrite = new StreamWriter("./3.txt");
fileWrite.WriteLine("第一行"); //使用替换的形式 写入一行之后会默认加入一个换行符
fileWrite.Write("不换号");// 使用替换的形式写入一行不换号
fileWrite.WriteLine("第二行");
fileWrite.Close();
*/
// 做一个练习 输入每一行的内容 逐行写入到3.txt中 直到遇到q结束
string str4 = "Dasdqasq";
Console.WriteLine(str4.IndexOf("s")); //如果找到该字符串 第一次出现的位置
//没有的话返回-1;
// StreamWriter FileWrite2 = new StreamWriter("./3.txt");
//自己写的
/* while (true)
{
foreach(char i in str4)
{
if (i == 'q')
{
break;
}
else
{
FileWrite2.WriteLine(i);
}
}
FileWrite2.Close();
break;
}*/
//老师方法
/* while (true)
{
string addStr = Console.ReadLine();
// 什么时候跳出循环q找出来对应的值不为 - 1
int Qindex = addStr.IndexOf("q"); //q存在
if (Qindex != -1)
{ //substring
addStr = addStr.Substring(0, Qindex);
FileWrite2.WriteLine(addStr);
break;
}
else // q不存在
{
FileWrite2.WriteLine(addStr);
}
}
FileWrite2.Close();*/
//字符串的一些方法 LastIndexOf,IndexOf,Substring
string comparestr1 = "1234";
string comparestr2 = "1234";
// 如果相当则为0 如果不想等 则-1;
Console.WriteLine("对比结果{0}",comparestr1.CompareTo(comparestr2));
string Qstr = "123456 ";
Qstr = Qstr.Substring(1, 4); //不包括2 从0开始截取 总共截取4个 0123
/* var compareStr = comparestr1.Concat(comparestr2).ToString(); // 合并
foreach (char i in compareStr)
{
Console.WriteLine(i);
}*/
// 字符串 引用类型
//stringBuilder . 申请了一个动态内存空间
StringBuilder builderStr1=new StringBuilder(4,20); // 基本是4 最大是5
StringBuilder builderStr2=new StringBuilder("dsadasdasdas");
builderStr1.Append("aasdd"); //追加到最后
builderStr1.Insert(0,"1"); //在指定下表位置插入内容
builderStr1.Remove(0,1);// 从0 开始 删除, 删除一个字符
builderStr1[0] = '2'; // 将第一个元素 更改为2
Console.WriteLine(builderStr1);
Console.WriteLine(builderStr1.Capacity);
}
}
}