您的位置:首页 > 编程语言 > C#

c#反射Type类型的一些方法介绍

2013-02-22 16:12 295 查看
=====TestLib.dll文件内容========

using System;

using System.Collections.Generic;

using System.Linq;

using System.Text;

namespace TestLib

{

    public class Class1

    {

        private int _age;

        public int Age

        {

            get { return _age; }

            set { _age = value; }

        }

        private string _name;

        public string Name

        {

            get { return _name; }

            set { _name = value; }

        }

        public void SayHi()

        {

            Console.WriteLine("大家好!");

        }

        public void AAA()

        {

            MyClass mc = new MyClass();

            mc.BBB();

        }

    }

    public interface IFlyable

    {

        void Fly();

    }

    public delegate void MyDelegate();

    public enum Good

    {

        高,

        富,

        帅

    }

    internal class MyClass

    {

        internal void BBB()

        {

            Console.WriteLine("能看到吗》");

        }

    }

    public class Person

    {

        public string Name

        {

            get;

            set;

        }

        public int Age

        {

            get;

            set;

        }

        public string Email

        {

            get;

            set;

        }

    }

    public class Chinese : Person, IZiWoXiuFu

    {

        //户口

        public string HuKouSuoZaiDi

        {

            get;

            set;

        }

        #region IZiWoXiuFu 成员

        public void XiuFu()

        {

            Console.WriteLine("以毒攻毒,配平了。");

        }

        #endregion

    }

    public interface IZiWoXiuFu

    {

        void XiuFu();

    }

    public abstract class MyAbsClass

    {

        public abstract void SayHello();

    }

    public static class MyStaticClass

    {

    }

}

=====控制台program.cs文件内容========

using System;

using System.Collections.Generic;

using System.Linq;

using System.Text;

using System.Reflection;

namespace _10Type类型的一些方法介绍

{

    class Program

    {

        static void Main(string[] args)

        {

            //1.动态加载程序集

            Assembly asm = Assembly.LoadFile(@"C:\testlib.dll");

            //2.1获取Chinese类型的Type

            Type typChinese = asm.GetType("TestLib.Chinese");

            //2.2获取Person类型的Type

            Type typPerson = asm.GetType("TestLib.Person");

            //2.3获取接口类型的Type

            Type typIXiuFu = asm.GetType("TestLib.IZiWoXiuFu");

            //2.4获取抽象类MyAbsClass的Type

            Type typMyAbsClass = asm.GetType("TestLib.MyAbsClass");

            //2.5获取静态类MyStaticClass的Type

            Type typMyStaticClass = asm.GetType("TestLib.MyStaticClass");

            #region IsAssignableFrom

            //3.验证一下Person类型是不是Chinese类型的父类。

            //验证是不是可以把typChinese类型的对象赋值给typPerson类型。

            //bool b = typPerson.IsAssignableFrom(typChinese);

            //Console.WriteLine(b);//true,因为Chinese继承了Person

            ////判断是否可以将typChinese的对象赋值给typIXiuFu类型

            //bool b = typIXiuFu.IsAssignableFrom(typChinese);

            //Console.WriteLine(b);

            #endregion

            #region IsInstanceOfType

            ////创建了一个typChinese类型的对象obj

            //object obj = Activator.CreateInstance(typChinese);

            //////验证obj是不是typChinese类型的对象

            ////bool b = typChinese.IsInstanceOfType(obj);

            ////Console.WriteLine(b);//true

            //////验证obj是不是typPerson类型的对象

            ////bool b = typPerson.IsInstanceOfType(obj);

            ////Console.WriteLine(b);//true

            //Console.ReadKey();

            #endregion

            #region IsSubclassOf

            ////验证typChinese是否是typPerson的子类

            ////bool b = typChinese.IsSubclassOf(typPerson);

            ////Console.WriteLine(b);

            ////判断typChinese是否是typIXiuFu的子类

            ////IsSubclassOf不考虑接口,只考虑父子类关系。

            //bool b = typChinese.IsSubclassOf(typIXiuFu);

            //Console.WriteLine(b);

            //Console.ReadKey();

 

            #endregion

            #region IsAbstract,判断某个类型是否是一个抽象的。

            //Console.WriteLine(typChinese.IsAbstract);

            //Console.WriteLine(typPerson.IsAbstract);

            ////接口、抽象类、静态类都不能被实例化,所以这里都认为是“抽象的”

            //Console.WriteLine(typIXiuFu.IsAbstract);

            //Console.WriteLine(typMyAbsClass.IsAbstract);

            //Console.WriteLine(typMyStaticClass.IsAbstract);

            //Console.ReadKey();

            #endregion

        }

    }

}

 

 
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: