zoukankan      html  css  js  c++  java
  • Reflection中对于out类型的获取

    先看这个代码:
    using System;

    namespace AppTest
    {
        
    public class AppTest1 
        
    {
            
    public void SetValue(string value1, out string value2) 
            
    {
                value2 
    = "hello";
            }


            
    public void SetValue(string value1)
            
    {
                
            }

        }

    }



    我的目的,是通过反射,得到SetValue带有两个参数的这个MethodInfo。一般的,我们会调用包含GetMethod中第5个或者第6个重载的方法,即,包含ParameterModifier的那个方法。但是不知道为什么,返回的MethodInfo总是null。后来google了一下GetMethod ParameterModifier,到.net247上找到了一个答案。代码修改为这样,可以了:
                Assembly asm = Assembly.LoadFrom(@"D:\Programs\vs.net\SerialGen\Test\bin\Debug\test.dll");
                Type t 
    = asm.GetType("AppTest.AppTest1");
                
                
    // 这段定义是下面第一个GetMethod使用的
                ParameterModifier[] pm = new ParameterModifier[2];
                pm[
    0= new ParameterModifier(1);
                pm[
    0][0= false;
                pm[
    1= new ParameterModifier(1);
                pm[
    1][0= true;

                
    // 这行,返回的mi是null
                MethodInfo mi  = t.GetMethod("SetValue",BindingFlags.DeclaredOnly,null,new Type[]{typeof(string),typeof(string)},pm);
                
    // 这行,返回的是正确的
                MethodInfo mi2 = t.GetMethod("SetValue",new Type[]{typeof(string),Type.GetType("System.String&")});

    第二个GetMethod中的TypeList,直接写成了System.String&就可以了。
    第一种方式,为什么不可以?对于上面的pm的赋值,也这样写过:
                ParameterModifier[] pm = new ParameterModifier[1];
                pm[
    0= new ParameterModifier(2);
                pm[
    0][0= false;
                pm[
    0][1= true;

    不过,也不正确。,不知道,这玩艺到底怎么用啊?
  • 相关阅读:
    QFramework 使用指南 2020(二):下载与版本介绍
    QFramework 使用指南 2020 (一): 概述
    Unity 游戏框架搭建 2018 (二) 单例的模板与最佳实践
    Unity 游戏框架搭建 2018 (一) 架构、框架与 QFramework 简介
    Unity 游戏框架搭建 2017 (二十三) 重构小工具 Platform
    Unity 游戏框架搭建 2017 (二十二) 简易引用计数器
    Unity 游戏框架搭建 2017 (二十一) 使用对象池时的一些细节
    你确定你会写 Dockerfile 吗?
    小白学 Python 爬虫(8):网页基础
    老司机大型车祸现场
  • 原文地址:https://www.cnblogs.com/juqiang/p/50838.html
Copyright © 2011-2022 走看看