李钢-15级
发表于 2016-5-29 20:38:58
本帖最后由 李钢-15级 于 2016-5-30 11:20 编辑
filestream 操作字节
例对多媒体文件进行复制
using (FileStream fsRead = new FileStream(soucre(路径), FileMode.Open, FileAccess.Read))//使用using是实现自动清除内存的功能
{
//2、创建一个负责写入的流
using (FileStream fsWrite = new FileStream(target, FileMode.OpenOrCreate, FileAccess.Write))
{
byte[] buffer = new byte;
//因为文件可能会比较大,所以我们在读取的时候 应该通过一个循环去读取
while (true)
{
//返回本次读取实际读取到的字节数
int r = fsRead.Read(buffer, 0, buffer.Length);//5m,读取内存的大小
//如果返回一个0,也就意味什么都没有读取到,读取完了
if (r == 0)
{
break;
}
fsWrite.Write(buffer, 0, r);//写入流的大小
}
streamreaderstreamwriter(只适用于文本文件)
李钢-15级
发表于 2016-5-29 22:10:06
本帖最后由 李钢-15级 于 2016-5-30 12:46 编辑
多态(一个对象多个类型)
一个父类,多个子类都有sayhellow的方法。那么可以利用多态来弄 虚构方法来构建多态
李钢-15级
发表于 2016-5-30 13:18:36
本帖最后由 李钢-15级 于 2016-5-30 15:24 编辑
抽象类 的方法来实现多态(子类方法不同)
abstract 关键字没有方法体
public abstract void bark();这个方法没有意义,如果能写的话,则用虚方法来实现
子类的写法和虚方法一样。
但是抽象类不能创建对象。
只能是
animal A = new cat();
A.bark(此时,调用的是猫里面的方法)
抽象类,里面可以有抽象成员以及非抽象成员
2.抽象成员必须在抽象类中。
3.抽象类不能被实例化
4.子类继承抽象类后,必须把父类中的所有抽象成员都重写。
(除非子类也是一个抽象类,则可以不重写)
5.抽象成员的访问修饰符不能是private
6.在抽象类中可以包含非抽象类成员。
7抽象类是有构造函数的。虽然不能被实例化。
8、如果父类的抽象方法中有参数,那么。继承这个抽象父类的子类在重写父类的方法的时候必须传入对应的参数。
如果抽象父类的抽象方法中有返回值,那么子类在重写这个抽象方法的时候 也必须要传入返回值。
======
如果父类中的方法有默认的实现,并且父类需要被实例化,这时可以考虑将父类定义成一个普通类,用虚方法来实现多态。
如果父类中的方法没有默认实现,父类也不需要被实例化,则可以将该类定义为抽象类。
李钢-15级
发表于 2016-5-30 20:21:57
本帖最后由 李钢-15级 于 2016-5-30 20:37 编辑
c#中的访问修饰符
internal 只能在当前项目中访问
protected子类才可以用用,可以跨项目
李钢-15级
发表于 2016-5-30 20:46:56
本帖最后由 李钢-15级 于 2016-5-31 10:14 编辑
值类型(zhan)和引用类型(堆)
值类型赋值是直接给值,而引用类型是赋的地址。
如
person p1 = new person()
person p2 = new person()
p1=p2,那么p1 和p2都指向同一对象(p1 p2 存的地址,地址指向堆上的空间)同理,如果把pi 传递到函数当中,值也会改变,就像是传递了地址,这与int类型不一样,但是与ref int一致。ref代表的是传递地址
一个查看变量地址的方法
李钢-15级
发表于 2016-5-30 21:55:29
本帖最后由 李钢-15级 于 2016-5-31 10:21 编辑
序列化,将对象转换成二进制传送到对方电脑
类
//要将p这个对象 传输给对方电脑
//Person p = new Person();
//p.Name = "张三";
//p.Age = 19;
//p.Gender = '男';
//using (FileStream fsWrite = new FileStream(@"C:\Users\SpringRain\Desktop\111.txt", FileMode.OpenOrCreate, FileAccess.Write))//将p这个对象写入这个文件
//{
// //开始序列化对象
// BinaryFormatter bf = new BinaryFormatter();
// bf.Serialize(fsWrite, p);//写入
反序列化,将二进制转换成对象 将接收到的二进制流转换成对象
Person p;//建立一个新的类型用于接收,反序列化后的p
using (FileStream fsRead = new FileStream(@"C:\Users\SpringRain\Desktop\111.txt", FileMode.OpenOrCreate, FileAccess.Read))
{
BinaryFormatter bf = new BinaryFormatter();
p = (Person)bf.Deserialize(fsRead);
}
Console.WriteLine(p.Name);
Console.WriteLine(p.Age);
Console.WriteLine(p.Gender);
Console.ReadKey();
}
}
李钢-15级
发表于 2016-5-30 22:43:13
本帖最后由 李钢-15级 于 2016-5-30 22:57 编辑
部分类
在同一个命名空间下不能用同一个类,但是加上关键字partial就可以了
私有字段在不同的parital类中可以访问(因为它们本来就属于一个类)
密封类
加关键字 sealed是不能被继承,但是可以继承别的
李钢-15级
发表于 2016-5-30 22:57:47
本帖最后由 李钢-15级 于 2016-5-31 10:40 编辑
复习 tostring (之所以都可以用到,因为包含tostring 的这个类是object的。是父类)
重写tostring(之所以能改因为这个方法是虚方法,为什么不是抽象的,因为子类是不可以调用父类的抽象方法的,一切类都是object的子类)
int a =2;
string a1 = a.ToString();//原始的
Person p = new Person();
Console.WriteLine(p.ToString());
Console.WriteLine(a1);
Console.ReadKey();
}
}
public class Person
{
public override string ToString()//重写
{
return "Hello World";
}
}
}
李钢-15级
发表于 2016-5-31 10:53:19
本帖最后由 李钢-15级 于 2016-5-31 14:14 编辑
接口(找不到父类,能力相同时)
interface
IFlyable fly = new Bird();
fly.Fly();//birdl类调用接口
Bird bird = new Bird();
bird.Fly();//应用bird类当中的fiy
Console.ReadKey();
}
public class Bird : IFlyable//接口的申明
{
public void Fly()
{
Console.WriteLine("鸟飞会");
}
/// <summary>
/// 显示实现接口(因为这里重名了)
/// </summary>
void IFlyable.Fly()
{
Console.WriteLine("我是接口的飞");
}
}
public interface IFlyable//接口的声明
{
void Fly();
}
李钢-15级
发表于 2016-6-1 09:00:25
本帖最后由 李钢-15级 于 2016-6-1 12:42 编辑
开始winform啦
桌面应用程序后台程序可以右键切换到窗口