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
  • 相关阅读:
    【心得】软件团队Git工作流及Jira的基本知识和常见问题解释
    项目系统Netty的Channel和用户之间的关系绑定正确做法,以及Channel通道的安全性方案
    Redis中的事务(多命令)操作
    Redis中的订阅模式
    Redis中有序列表(ZSet)相关命令
    Redis散列(Hash)的相关命令
    输入输出流String间的转换
    linux 常用命令
    Gradle 使用
    c 学习笔记 0
  • 原文地址:https://www.cnblogs.com/HondaHsu/p/734924.html
Copyright © 2011-2022 走看看