zoukankan      html  css  js  c++  java
  • C#中使用反射获取结构体实例

    一般用反射获取类对象的实例比较简单,只要类有一个无参构造函数没有显示声明带参的构造函数即可使用如下代码

    static void Main(string[] args)
    {
        Type type = typeof(MyObject);
        object obj = type.GetConstructor(Type.EmptyTypes).Invoke(null);
        Console.WriteLine(obj);
    }
    
    class MyObject
    {
    
    }

    之前我一直没有发现原来结构是不可以这样实例化的

    换种方式,似乎结构体使用反射无法得到其构造函数ConstructorInfo对象

    类中有一个隐式的构造函数,而结构没有构造函数

    我甚至尝试查找非public构造函数

    依然没有

    这问题一度困扰我很久....解决的方法并不难,所以也没当回事,但今天有个朋友又问到了这个问题,所以总结一下发出来,给同样遇到这个问题的朋友

    其实非常简单,只要这样就可以了

    static void Main(string[] args)
    {
        Type type = typeof(MyStruct);
        object obj1 = type.Assembly.CreateInstance(type.FullName);
    }
    
    struct MyStruct
    {
    
    }

    这个方法说明

    Assembly.CreateInstance

    使用区分大小写的搜索,从此程序集中查找指定的类型,然后使用系统激活器创建它的实例。

    使用这个方法就不用管class还是struct 都是可以用的,如果是class只要保证有无参构造函数就可以

    这个方法不是什么高深的玩意儿,主要是给同样碰到这个问题的同学说明一下

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

    感谢 KarasCanvas同学,原来C#还有Activator这么一个类

    Activator.CreateInstance(Type)

    这样就可以了

  • 相关阅读:
    飞入飞出效果
    【JSOI 2008】星球大战 Starwar
    POJ 1094 Sorting It All Out
    POJ 2728 Desert King
    【ZJOI 2008】树的统计 Count
    【SCOI 2009】生日快乐
    POJ 3580 SuperMemo
    POJ 1639 Picnic Planning
    POJ 2976 Dropping Tests
    SPOJ QTREE
  • 原文地址:https://www.cnblogs.com/blqw/p/3358321.html
Copyright © 2011-2022 走看看