zoukankan      html  css  js  c++  java
  • .NET基础示例系列之四:反射

    (1)namespace ClassLibrarySport

    {

        public abstract class Sport

        {

            protected string name;

            public abstract string GetName();

            public abstract string GetDuration();

        }

    }

    = = = = = == = == = == = == = == = == = == = == = == = == = == = == = == = == = == = =

    (2)namespace ClassLibrarySomeSports//该项目添加了对(1)的引用

    {

        public class Football : ClassLibrarySport.Sport

        {

            public Football()

            {

                name = "Football";

            }

            public override string GetName()

            {

                return name;

            }

            public override string GetDuration()

            {

                return "four 15 minute quarters";

            }

        }

    }

    = = = = = == = == = == = == = == = == = == = == = == = == = == = == = == = == = == = =

    (3)namespace ConsoleAssemblyTest//该项目添加了对(1)的引用

    {

        class Program

        {

            static void Main(string[] args)

            {

                Assembly assembly = Assembly.LoadFrom(@"E:\ClassLibrarySomeSports\

    bin\Debug\ClassLibrarySomeSports.dll");

                Type[] types = assembly.GetTypes();

     

                Console.WriteLine("Get Type From ClassLibrarySomeSports.dll:");

                for (int i = 0; i < types.Length; i++)

                {

                    Console.WriteLine(types[i].Name);

                }

     

                //使用GetConstructor()方法获取对应类型的构造器,从而构造出该类型的对象

                Console.WriteLine("Use Method GetConstructor():");

                ConstructorInfo ci = types[0].GetConstructor(new Type[0]);

                ClassLibrarySport.Sport sport = (ClassLibrarySport.Sport)ci.Invoke(new object[0]);

                Console.WriteLine(sport.GetName() + " has " + sport.GetDuration());

     

                //使用Activator.CreateInstance()方法构造出该类型的对象

    //使用assembly.CreateInstance()返回为null,??

                Console.WriteLine("Use Method CreateInstance():");

                ClassLibrarySport.Sport sport1 = (ClassLibrarySport.Sport)

    Activator.CreateInstance(types[0]);

                Console.WriteLine(sport1.GetName() + " has " + sport1.GetDuration());

     

                //反射指定类型中的名称为“GetDuration”的方法,通过Invoke()方法执行该方法

                object objSport = Activator.CreateInstance(types[0]);

                MethodInfo method = types[0].GetMethod("GetDuration");

                object o = method.Invoke(objSport, new object[0]);

                Console.WriteLine(o as string);

     

                Console.Read();

            }

        }

    }

    = = = = = == = == = == = == = == = == = == = == = == = == = == = == = == = == = == = =

    Output:

    Get Type From ClassLibrarySomeSports.dll:

    Football

    Use Method GetConstructor():

    Football has four 15 minute quarters

    Use Method CreateInstance():

    Football has four 15 minute quarters

    four 15 minute quarters

     

  • 相关阅读:
    小贝_mysql 存储过程
    Codeforces Round #253 (Div. 1)-A,B
    rac环境改动spfile后遭遇ora-29250小例
    Linux学习笔记——例说makefile 索引博文
    《信息检索》课程论文撰写指南 及 分享加分说明
    git mirror的创建与使用
    一起talk GDB吧(第二回:GDB单步调试)
    nginx源代码分析--配置信息的继承&amp;合并
    EasyUI基础入门之Droppable(可投掷)
    自己动手写CPU之第七阶段(5)——流水线暂停机制的设计与实现
  • 原文地址:https://www.cnblogs.com/morvenhuang/p/475717.html
Copyright © 2011-2022 走看看