1.XML
<1>XML是树形结构
-> XML语法规范
-> 标签(Tag)
-> 嵌套(Nest)
-> 属性(Attribute)
-> 标签闭合、属性双引号、大小写敏感
-> XML结构(XML树)
-> 父节点
-> 子节点
-> 兄弟节点
<?xml version="1.0" encoding="gb2312" ?> //XML的标头
<2>LinqToXML
{
static void Main(string[] args)
{
//1.创建一个XML文档
XDocument XDoc = new XDocument();
//2.添加根节点 XElement 元素
XElement XRoot = new XElement("Root"); //需要写入根节点名
XDoc.Add(XRoot);
//创建一个省加入到Root中
XElement xProvince = new XElement("Province");
XRoot.Add(xProvince);
//创建省名,位置,省会加入到xProvince中
XElement xName = new XElement("Name");
XElement xLocation = new XElement("Location");
XElement xPcaptial = new XElement("Captial");
xName.Value = "江苏"; //为节点赋值
xLocation.Value = "东部";
xPcaptial.Value = "南京";
xProvince.Add(xName, xLocation, xPcaptial);
//为 xProvince添加属性
XAttribute xNum = new XAttribute("ID", "001"); //属性名,属性的值
xProvince.Add(xNum);
//保存XML文档
XDoc.Save(@"F:\myxml.xml");
}
}
(3)读取XML
递归算法没弄出来
(4)XML序列化
{
static void Main(string[] args)
{
List<Person> perList = new List<Person>()
{
new Person(){ Name="董超 ",Age=19, Gender='男'},
new Person(){ Name="周杰伦",Age=30, Gender='男'},
new Person(){ Name="蔡依林",Age=28, Gender='女'}F:\传智学习记录\上课视频资料\20120707第十二天_委托_XML_反射\Source\20120707第十二天_委托_XML_反射\15天天再用的反射\Program.cs
};
using (FileStream file =
new FileStream("序列化xml.xml", FileMode.Create, FileAccess.Write))
{
XmlSerializer ser = new XmlSerializer(typeof(List<Person>));
ser.Serialize(file, perList);
}
}
}
[Serializable]
public class Person //这是一个类
2反射
-> 什么是反射
-> 智能提示、反编译等
-> 反射就是将程序集当做文件来读,然后使用里面的类库
-> Type类
-> 如何获得一个类型的所有成员
-> Type对象是一个描述类型的对象
-> GetType方法与typeof运算符
-> 反射的使用
-> 使创建对象的方式发生了改变
-> 通过元数据创建对象
-> VS的智能提示
<1>使用反射
class Program
{
static void Main(string[] args)
{
// 使用类型信息创建对象,并调用方法
// 反射就是读取程序集,得到对象,创建对象,使用对象
// 创建对象,就需要获得对象的类型信息
Type myType = typeof(Person);
// 根据类型信息创建对象
object o = Activator.CreateInstance(myType);
// 调用方法先获得方法
//// 调用的方法
Type[] t = new Type[3];
MethodInfo m = myType.GetMethod(
"Func", Type.EmptyTypes
);
// 调用的方法
m.Invoke(o, null);
Console.ReadKey();
}
}
public class Person
{
public void Func()
{
Console.WriteLine("我是反射出来的对象");
}
public void Func(int num, string str, char ch)
{
Console.WriteLine("{0}\t{1}\t{2}", num, str, ch);
}
}
<2>读取DLL
public interface IF
{
void F();
}
class CC:IF
{
public void F()
{
throw new NotImplementedException();
}
}
class Program
{
static void Main(string[] args)
{
// 先要找到dll
string path = @"dll";
string[] dlls = Directory.GetFiles(path, "*.exe");
Assembly asm = Assembly.LoadFile(Path.GetFullPath(dlls[0]));
// 通过读取程序集,得到对象
// 得到类型需要写全路径名
Type t = asm.GetType("ConsoleApplication2.Program");
MethodInfo mi = t.GetMethod("Func");
object o = Activator.CreateInstance(t);
mi.Invoke(o, null);
CC c = new CC();
bool isRight = typeof(IF).IsAssignableFrom(c.GetType());
// t.IsSubclassOf()不能用作接口的判断
/*
* 如果类型是通过接口派生的子类,那么未来实现调用,
* 可以判断读取的类型Type变量是否来源于该接口
*
*/
Console.ReadKey();
}
}