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(); } } posted on 2012-07-08 14:47 阅读( ...) 评论( ...)