张磊(Avraber)

  博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

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  张磊(Avraber)  阅读(161)  评论(0编辑  收藏  举报