1.FileStream文件流
使用FileStream来读取数据:
FileStream fsread = new FileStream(@"E:\系统默认\桌面\文件类测 试.txt",FileMode.OpenOrCreate,FileAccess.ReadWrite);
byte[] butter = new byte[1024 * 1024 * 5];
//3.8M 5M
int r = fsread.Read(butter,0,butter.Length);
//返回此次实际读到的有效字节数;
string s = Encoding.UTF8.GetString(butter,0,r);
//将文件中每一个元素按指定编码转化为字符串;
fsread.Close();//关闭文件流
fsread.Dispose();//释放文件流所占用的资源
Console.WriteLine(s);
Console.ReadKey();
使用FileStream来写入数据:
using (FileStream fswrite = new FileStream(@"E:\系统默认\桌面\文件类测试.txt", FileMode.OpenOrCreate, FileAccess.Write))
{
string str = "看我有没有把你覆盖";
byte[] butter = Encoding.UTF8.GetBytes(str);
fswrite.Write(butter, 0, butter.Length);
}
Console.WriteLine("写入成功");
Console.ReadKey();
2.自动释放资源
将创建的文件流对象的过程写在using中,会自动帮助我们释放流所占用的资源;
3.多态
概念:让一个对象能够表现出多种的状态(类型)
方法:
1.虚方法 :把父类函数标记为virtual 子类标记为override
实现代码:
class Program
{
static void Main(string[] args)
{
//狗狗会叫 猫咪也会叫
Anlime an = new Anlime();
Cat be = new Cat();
Dog ca = new Dog();
Anlime[] ane = { an, be, ca };
for (int i = 0; i < ane.Length; i++)
{
ane[i].anlime();
}
Console.ReadKey();
}
}
public class Anlime
{
public virtual void anlime()
{
Console.WriteLine("动物会叫");
}
}
public class Dog : Anlime
{
public override void anlime()
{
Console.WriteLine("狗狗会叫");
}
}
public class Cat : Anlime
{
public override void anlime()
{
Console.WriteLine("猫咪也会叫");
}
}
2.抽象类 :当父类中的方法不知道如何去实现的的时候,可以考虑将父类写成抽象类abstract,将方法写成抽象方法,抽象类的方法没有方法体,且抽象类的对象不能被创建
实现代码:
class Program
{
static void Main(string[] args)
{
//狗狗会叫 猫咪也会叫
Anlime an = new Dog();
Anlime be = new Cat();
an.anlime();
be.anlime();
Console.ReadKey();
}
}
public abstract class Anlime
{
public abstract void anlime();
}
public class Dog : Anlime
{
public override void anlime()
{
Console.WriteLine("狗狗会叫");
}
}
public class Cat : Anlime
{
public override void anlime()
{
Console.WriteLine("猫咪也会叫");
}
}
class Program
{
static void Main(string[] args)
{
// 使用多态求矩形的面积和周长以及圆形的面积和周长
Shape an = new Juxing(1,3);
Shape be = new Yuan(4);
double zhou = an.Zhou();
double mian = an.Mian();
double zhou1 = be.Zhou();
double mian1 = be.Mian();
Console.WriteLine("矩形的周长是{0} 面积是{1};圆形的周长是{2}面积是{3}", zhou, mian, zhou1, mian1);
Console.ReadKey();
}
public abstract class Shape//shape的抽象类
{
public abstract double Zhou();
public abstract double Mian();//两个抽象方法
}
public class Juxing : Shape//矩形类
{
private double _a;//字段_a
public double a//字段a的属性
{
get { return _a; }
set { _a = value; }
}
private double _b;//字段_b
public double b//字段b的属性
{
get { return _b; }
set { _b = value; }
}
public Juxing (double a ,double b)
{
this.a = a;
this.b = b;
}
public override double Zhou()
{
return (this.a + this.b) * 2;
}
public override double Mian()
{
return this.a * this.b;
}
}
public class Yuan : Shape//圆形类
{
private double _r;
public double r
{
get { return _r; }
set { _r = value; }
}
public Yuan(double r)
{
this.r = r;
}
public override double Zhou()
{
return 2 * 3.14 * this.r;
}
public override double Mian()
{
return 3.14 *this.r * this.r;
}
}
}
4.绝对路径和相对路径
绝对路径:通过给定的这个路径直接能在我的电脑中找到
相对路径:文件相对于应用程序的路径
我们在开发中应该使用相对路径
5.装箱|拆箱
装箱:就是将值类型转换为引用类型
拆箱:就是将引用类型转换为值类型
看两种类型是否发生了装修或者拆箱,要看这两种类型是否存在继承关系