c# 点点滴滴


1 为什么要用到工厂模式?

工厂模式的优点:分离出具体类的生成方式。
例: 当编写一个数据库操作类的时候,我们为了让数据库操作类支持 mssql oracle mysql …
此时我们可以采用工厂模式去设计这个类,当系统更换一种数据库时,此时我们只需调整数据库操作类,而不用调整业务层代码,这就是工厂模式的优点。

2 为什么要用到反射?

反射动态的加载dll,动态的获取和使用dll中的属性、方法。
运用场景1:反射通常用在需要深度封装,不轻易修改的dll上,
运用场景2:获取有很多动态类型属性的dll
例1:
动态赋值 textbox droplist
例2:
不修改原dll ,新增一个dll 包含源dll 中的功能
例3:
反射复制类属性

3 为什么要用到委托?

委托可以将方法的引用封装在委托类里面。
委托可以让一个事件调用多个方法。
委托可以把方法作为参数/属性来赋值和传递。

4 为什么要用到实体类?

实体类:实体类就是一个实体的集合,方便数据的传送和存储而产生的一个属性类。
使用实体类,可以使程序拥有更强的可读性。

5 c# 类系列化 Serializable的作用

类系列化就是将一个类对象转换为可以进行存储的格式。
类在进行系列化的时,类中的公用和私有字段及类的其它信息都会被转换为字节流,进行传输和存储。

类序列化应用场景:

1 需要存储类对象时。
2 需要将类对象传送到另一个程序中时(dataset传输前,需进行xml序列化)。
3 序列化 反序列化
3.1 xml 序列化
//xml系列化一个变量 并输出xml
int i = 56;
XmlSerializer t = new XmlSerializer(typeof(int));
StreamWriter t2 = new StreamWriter(“t2.xml”);
t.Serialize(t2, i);
Response.Write(“系列化成功1!
“);

//反系列化
using (StringReader t3 = new StringReader(@”
56“))
{
XmlSerializer t4 = new XmlSerializer(typeof(int));
int i2 = (int)t4.Deserialize(t3);
Response.Write(“反系列化数值:”+i2.ToString()+”
“);
}

//类定义
public class testClass
{
public string fileld1 { get; set; }
public int fileld2 { get; set; }
public string fileld3 { get; set; }
public void tt() {
fileld1 = fileld3;
}
private int field5;
private int field6{get;set;}
public string field7 { get; set; }
}

//类序列化
testClass t5 = new testClass() { fileld1 = “a”, fileld2 = 85, fileld3 = “c2″,field7=”c”};
XmlSerializer t6 = new XmlSerializer(typeof(testClass));
StreamWriter t7 = new StreamWriter(“t2.xml”);
t6.Serialize(t7, t5);
Response.Write(“序列化成功2!
“);


类系列化中只有 公共属性才会被序列化到xml中


3.2 二进制序列化

//二进制序列化(引入 using System.Runtime.Serialization.Formatters.Binary; )
testClass t8 = new testClass() { fileld1 = “a”, fileld2 = 85, fileld3 = “c2″,field7=”c”};
BinaryFormatter t9 = new BinaryFormatter();
Stream t10 = new FileStream(“t10.bin”,FileMode.Open, FileAccess.Write, FileShare.None);
t9.Serialize(t10, t8);
t10.Close();

//二进制反序列化
BinaryFormatter t11 = new BinaryFormatter();
Stream t12 = new FileStream(“t10.bin”, FileMode.Open, FileAccess.Read, FileShare.Read);
testClass t13 = (testClass)t11.Deserialize(t12);
Response.Write(“field7:”+t13.field7.ToString()+”
“);
Response.Write(“field1:” + t13.fileld1.ToString() + “
“);
Response.Write(“field2:” + t13.fileld2.ToString() + “
“);
Response.Write(“field3:” + t13.fileld3.ToString() + “
“);

t12.Close();