using System; using System.IO; using System.Text;
namespace ConsoleApp1 { /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<int>math=new MyMath<int>();//这时候T的类型为int类型
*//* Console.WriteLine(math.GetNum(123));*//*
MyMath<string>math2=new MyMath<string>();//这时候T的类型为int类型
*//*Console.WriteLine(math2.GetNum("jiskfnh"));*//*
Console.WriteLine(math.GetNum(233, 345));
//定义一个泛型列表
List<int> list = new List<int>(3) ;//元素长度count 列表容量capacity
Console.WriteLine(list.Count);//如果没有值的话,元素个数是0,容量也是0
Console.WriteLine(list.Capacity);
list.Add(1);
int[] intArray = { 1,2,3,4,56 };
list.AddRange(intArray);*/
/* list.Add(45);
Console.WriteLine(list[2]);
Console.WriteLine(list[list.Count-1]);//读取最后一个值
list.Insert(0, 5);//在下标为0的位置插入一个5
Console.WriteLine(list[0]);
list.Remove(34);//填要删除的元素
list.RemoveAt(1);//填要删除的元素的下标
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>();
dic2.Add("name2", "小明");
*//*dic.Concat(dic2).ToDictionary(x=>x.Key,y=y.Value);*//*
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)//KeyValuePair表示键值对应的类型
{
Console.WriteLine("值为{0},键名为{1}", k.Value, k.Key);
}
Console.WriteLine(dic.ContainsKey("name1"));
Console.WriteLine(dic.ContainsValue("麻辣王子"));*/
#三、 大文件读取方式
FileStream fsRead = new FileStream("./1.txt", 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(a);
Console.WriteLine(rNum);
fsRead.Close();//关闭文件流
fsRead.Dispose();//释放所占资源
写入 替换 追加
using(FileStream fdWrite = new FileStream("./1.txt", FileMode.Append, FileAccess.Write))
{
string b = "123456";
//将字符串转成字节
byte[] fdByte = Encoding.UTF8.GetBytes(b);
fdWrite.Write(fdByte);//将文件信息使用追加的形式写到文件中
}
using(FileStream fdWrite = new FileStream("./1.txt", FileMode.Create, FileAccess.Write))
{
string b = "123456";
//将字符串转成字节
byte[] fdByte = Encoding.UTF8.GetBytes(b);
fdWrite.Write(fdByte);//将文件信息使用替换的形式写到文件中
}
//读取的是字符串
StreamReader fileRead = new StreamReader("./2.txt",Encoding.Default);
/* string fileString = fileRead.ReadLine();//读取每一行信息
string allText = fileRead.ReadToEnd();//读取所有信息
char fileChar = (char)fileRead.Read();//读取一个字符
Console.WriteLine(fileString);
Console.WriteLine(allText);*/
// Console.WriteLine((char)fileRead.Read());//逐个逐个读取,返回该字符对应的十进制数,没有返回-1
fileRead.Close();//关闭文档流
//Substring
/* string Qstr5 = "12345";
Qstr5 = Qstr5.Substring(0, 2);//从0开始,2为长度
Console.WriteLine(Qstr5);*/
//写入信息
// StreamWriter fileWrite = new StreamWriter("./2.txt");
/*fileWrite.WriteLine("第一行");//使用替换的形式写入一行后会默认加一个换行符
fileWrite.Write("不换行");//使用替换的形式写入一行
fileWrite.WriteLine("第二行");*///写入一行之后默认加一个换行符
//做一个练习 输入一行的内容,逐行写入到2.txt中直到遇到q结束
/*while(true)
{
string addStr = Console.ReadLine();
//q找出来对应的值不为-1时跳出
int Qindex = addStr.IndexOf("q");
if (Qindex != -1)
{//Substring
addStr = addStr.Substring(0, Qindex);
fileWrite.WriteLine(addStr);
break;
}
else
{
fileWrite.WriteLine(addStr);
}
}*/
//compareTo()对比两个字符串是否相等
string comparaStr1 = "1234";
string comparaStr2 = "12345";
Console.WriteLine("对比结果{0}",comparaStr1.CompareTo(comparaStr2));//如果相等则为0,不相等则为1
//字符串 引用类型
//StringBuilder 申请了一个动态内存空间
StringBuilder builderStr1 = new StringBuilder(4,5);//(最小容量,最大容量)
StringBuilder builderStr2 = new StringBuilder("dfsdfgghgkj");
builderStr1.Append("dfgg");//追加到最后
builderStr1.Insert(0, "1");//在指定下标位置插入内容
builderStr1.Remove(0,1);//从0开始删除,删除一个字符
builderStr1[0] = '3';//更改字符
Console.WriteLine(builderStr1);
Console.WriteLine(builderStr1.Capacity);
}
}
}
四、接口
namespace 接口
{ public class Animal { public void sleep() { Console.WriteLine("睡觉"); }
}
public interface Flyable
{
int num { get; set; }//里面的get,set实质上没有函数体的函数
void getNum();//默认都是公开的
void fly();
void skating();
}
public interface Eat
{
void eat();
}
//一个接口继承多个接口
public interface SuperFace : Flyable, Eat { }
class Bird : Animal,Flyable,Eat//继承一个类、多个接口,类要写在最前面
{
public int num1;
int Flyable.num { get => num1; set { num1 = value; }}
public void eat()
{
Console.WriteLine("吃");
}
public void fly()
{
Console.WriteLine("飞2");
}
public void getNum()
{
Console.WriteLine("滑行");
}
public void skating()
{
Console.WriteLine("滑行");
}
}
internal class Program
{
static void Main(string[] args)
{
Bird bird1=new Bird();
bird1.fly();
}
}
}
五、小文件
using System;
using System.IO;
using System.Text;
namespace 小文件操作
{
internal class Program
{
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行:{0}", i);//打印每行信息
}
//添加信息 两种 追加 整个替换(默认)
File.WriteAllText("./1.txt", "替换内容");
string[] str3 = { "1", "2", "3" };
File.AppendAllLines("./1.txt",str3);//表示将数组中的字符串逐行追加的文件中
File.AppendAllText("./1.txt", "\n追加内容");//在末尾添加内容
Console.WriteLine();
}
}
}
六、练习题
//题目一
/*int[] intArray = { 1, 3, 23, 34, 123, 12, 33 };
List<int> list1 = new List<int>();
List<int> list2 = new List<int>();
foreach(int i in intArray)
{
if(i%2!=0)
{
list1.Add(i);
}
else
{
list2.Add(i);
}
}
list1 = list1.Concat(list2).ToList();//合并list1和list2返回的一个新的列表
foreach(int i in list1)
{
Console.WriteLine(i);
}*/
//题目二
string str1 = "maddfdmdf";
Dictionary<char,int> dic = new Dictionary<char, int>();
foreach (char i in str1)
{
if(dic.ContainsKey(i))//判断字典dic中有没有对应的键名
{
dic[i]++;
}
else
{
dic.Add(i, 1);
}
}
foreach(KeyValuePair<char,int> k in dic)
{
Console.WriteLine("字符{0}出现的次数为{1}", k.Key, k.Value);
}