回顾
using System;
using System.Security.Cryptography.X509Certificates;
namespace ConsoleApp3
{
class program
{
public class M
{
public M(int num)
{
num = num;
}
public M(int num, string v) : this(num)
{
}
public int num;
public string str
{
get;set;
}
static public int num2;
static public void getNum()
{
Console.WriteLine(num2);
}
public virtual void Show()
{
Console.WriteLine("父类");
}
class M1 : M
{
public M1(int num,string str1):base(num)
{
str1 = "1";
}
public string str;
public override void Show()
{
base.Show();
Console.WriteLine("子类");
}
}
}
static void Main1(string[] args)
{
M m1 = new M(1,"df");
Console.WriteLine(m1. num);
m1.str = "24";
Console.WriteLine(m1.str);
M m2 = new M1(1, "df");
m2.Show();
}
private class M1 : M
{
public M1(int num, string v) : base(num, v)
{
}
}
}
}
接口
1.为什么需要接口
接口相当于是一个规范,接口可以实现多继承,接口指定- -组没有函数体的函数成员,也就是说只提供了一-些没有函数体的函数,具体怎么实现还要我们在自己的类中去实现。
2.接口的使用
1.接口中包含很多没有实现的函数成员,每个成员不需要设置访问修饰符,默认都是public公开
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace ConsoleApp1017am
{
public class Animal
{
public void sleep()
{
Console.WriteLine("睡");
}
}
public interface Flyable
{
int num { get; set; }
void fly();
void skating();
}
public interface Eat
{
void eat();
}
public interface SuperFace : Flyable, Eat{ }
class Bird : Animal, Flyable
{
public void eat()
{
Console.WriteLine("吃");
}
public int num1;
public int num { get => num1; set { num1 = value; } }
public void fly()
{
Console.WriteLine("飞1");
}
void Flyable.fly()
{
Console.WriteLine("飞2");
}
public void skating()
{
Console.WriteLine("滑");
}
internal class Program
{
static void Mian(string[] args)
{
Bird bird1 = new Bird();
bird1.fly();
bird1.sleep();
}
}
}
}
小文件操作
File类 ,读写文件 整个文件信息一次性全部读取过来 一般读取小文件
public class 小文件操作
{
static void Main(string[] args)
{
string str = File.ReadAllText("./1.TXT",Encoding.UTF8);
Console.WriteLine(str);
}
}
}
读取所有行的信息
using System;
using System.IO;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace ConsoleApp1017am
{
public class 小文件操作
{
static void Main(string[] args)
{
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行:{0}", i);
}
}
}
}
添加信息 两种 1.追加(在文件末尾添加新内容) 2.替换(默认)
using System;
using System.IO;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace ConsoleApp1017am
{
public class 小文件操作
{
static void Main(string[] args)
{
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行:{0}", i);
}
File.WriteAllText("./1.TXT","替换的内容");
string[] str3 = { "1", "2" }
; File.AppendAllLines("./1.TXT",str3);
File.AppendAllText("./1.TXT", "最追加的内容");
Console.WriteLine(str);
}
}
}


泛型
namespace 泛型
{
public class MyMath<T>
{
public T GetNum(T num1,T num2)
{
dynamic num3 = num1;
dynamic num4 = num2;
return num3+num4;
}
}
internal class Program
{
static void Main(string[] args)
{
MyMath<string> math = new MyMath<string>();
Console.WriteLine(math.GetNum("sxwasefawr", "sxwasefawr"));
MyMath<int> math2 = new MyMath<int>();
Console.WriteLine(math2.GetNum(123,345));
List<int> list = new List<int>(4) { 132, 34, 56, 78 ,2};
Console.WriteLine(list.Count);
Console.WriteLine(list.Capacity);
list.Add(1);
int[] intArray = { 1, 23, 45, 56 };
list.AddRange(intArray);
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", "怪怪2");
dic.Concat(dic2);
foreach (string k in dic.Values)
{
Console.WriteLine("值为{0}",k);
}
foreach (string k in dic.Keys)
{
Console.WriteLine("键为{0}", k);
}
foreach(KeyValuePair<string,string> k in dic)
{
Console.WriteLine("键名为{0},值为{1}", k.Key, k.Value);
}
Console.WriteLine(dic.ContainsValue("怪怪"));

泛型 集合列表,字典 文件操作
有一个数组{1,3,4,6,77} 把奇数和偶数分别放到两个集合,然后再将集合合并
1.练习一:将一个数组中的奇数放到一一个集合中,再将偶数放到另一个集合中,最终将两个集合
int[] intArray1 = { 1, 3, 45, 68, 90 }
List<int> list1 = new List<int>()
List<int> list2 = new List<int>()
foreach(int i in intArray1)
{
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.练习二:使用字典的方式计算出任意字符串中每个字符出现的次数
string str1 = "mshdjrfidodkendh";
Dictionary<char, int> dic3 = new Dictionary<char, int>();
foreach(char i in str1)
{
if (dic3.ContainsKey(i))
{
dic3[i]++;
}
else
{
dic3.Add(i,1);
}
}
foreach(KeyValuePair<char, int> k in dic3)
{
Console.WriteLine("字符{0}出现的次数为{1}", k.Key, k.Value);
}

一.大文件读取方式
1.FileStream文件流(操作字节可以读取各种文件信息)
FileStream fsRead = new FileStream("./1.TXT", FileMode.OpenOrCreate, FileAccess.ReadWrite)
//创建一个字节数组
byte[] fsByte = new byte[1024*1024*4]
//开始读取文件,读取完返回的是实际读取到的字节数
int rNum = fsRead.Read(fsByte)
//根据字节数,将读取到的字节转换成字符串
string a = Encoding.Default.GetString(fsByte, 0, rNum)
Console.WriteLine(a)


(1) FileStream文件流和File的区别
File在读取文件的时候是一-次性读取所有的文件信息, 而FileStream是以文件流的形式- -点点去读取文件的信息
(2)使用FileStream读取文件
FileStream fsRead = new FileStream("./1.TXT", FileMode.OpenOrCreate, FileAccess.ReadWrite)
//创建一个字节数组
byte[] fsByte = new byte[1024*1024*4]
//开始读取文件,读取完返回的是实际读取到的字节数
int rNum = fsRead.Read(fsByte)
//根据字节数,将读取到的字节转换成字符串
string a = Encoding.Default.GetString(fsByte, 0, rNum)
Console.WriteLine(a)
fsRead.Close()
fsRead.Dispose()
做一个练习 输入每一行的内容,逐行写入到2.TXT中直到遇到q结束
StreamWriter fileWrite = new StreamWriter("./2.txt")
while (true)
{
Console.WriteLine("请输入要存入的数字")
string str = Console.ReadLine()
int Qindex = str.IndexOf("q")
if (Qindex != -1)
{
//subString 字符串截取
str = str.Substring(0, Qindex)
fileWrite.WriteLine(str)
break
}
else
{
fileWrite.WriteLine(str)
}
}
fileWrite.Close()
字符串的一些方法 LastIndexOF,IndexOF,SubString
compareTo()对比两个字符串是否相等
string compareStr1 = "1234"
string compareStr2 = "1234"
Console.WriteLine("对比结果{0}", compareStr1.CompareTo(compareStr2))
string Qstr = "123456"
Qstr = Qstr.Substring(1, 4)

StringBuilder,申请了一个动态内存空间
StringBuilder builderStr1 = new StringBuilder(4, 5)
StringBuilder builderStr2 = new StringBuilder("asdfgh")
builderStr1.Append("vb")
builderStr1.Insert(0, "1")
builderStr1.Remove(0,1)
builderStr1[0] = '2'
Console.WriteLine(builderStr1)
Console.WriteLine(builderStr1.Capacity)
