博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
XML与反射
阅读量:5339 次
发布时间:2019-06-15

本文共 2953 字,大约阅读时间需要 9 分钟。

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 阅读(
...) 评论(
...)

转载于:https://www.cnblogs.com/zhanglei-net/archive/2012/07/08/2581539.html

你可能感兴趣的文章
String比较
查看>>
Django之Models
查看>>
CSS 透明度级别 及 背景透明
查看>>
Linux 的 date 日期的使用
查看>>
PHP zip压缩文件及解压
查看>>
SOAP web service用AFNetWorking实现请求
查看>>
Java变量类型,实例变量 与局部变量 静态变量
查看>>
mysql操作命令梳理(4)-中文乱码问题
查看>>
Python环境搭建(安装、验证与卸载)
查看>>
一个.NET通用JSON解析/构建类的实现(c#)
查看>>
Windows Phone开发(5):室内装修 转:http://blog.csdn.net/tcjiaan/article/details/7269014
查看>>
详谈js面向对象 javascript oop,持续更新
查看>>
关于这次软件以及pda终端的培训
查看>>
jQuery上传插件Uploadify 3.2在.NET下的详细例子
查看>>
如何辨别一个程序员的水平高低?是靠发量吗?
查看>>
新手村之循环!循环!循环!
查看>>
正则表达式的用法
查看>>
线程安全问题
查看>>
SSM集成activiti6.0错误集锦(一)
查看>>
下拉刷新
查看>>