发文章
发文工具
撰写
网文摘手
文档
视频
思维导图
随笔
相册
原创同步助手
其他工具
图片转文字
文件清理
AI助手
留言交流
一般用反射获取类对象的实例比较简单,只要类有一个无参构造函数或没有显示声明带参的构造函数即可使用如下代码
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 使用区分大小写的搜索,从此程序集中查找指定的类型,然后使用系统激活器创建它的实例。
Assembly.CreateInstance
使用区分大小写的搜索,从此程序集中查找指定的类型,然后使用系统激活器创建它的实例。
使用这个方法就不用管class还是struct 都是可以用的,如果是class只要保证有无参构造函数就可以了
这个方法不是什么高深的玩意儿,主要是给同样碰到这个问题的同学说明一下
======================================================
感谢 KarasCanvas同学,原来C#还有Activator这么一个类
Activator.CreateInstance(Type)
这样就可以了
来自: 昵称10504424 > 《工作》
0条评论
发表
请遵守用户 评论公约
C#综合揭秘——反射的奥妙
利用Assembly的object CreateInstance(string) 方法可以反射创建一个对象,参数0为类名。常用的方法有GetValue(object,object[]) 获取属性值和 SetValue(object,object,object[]) 设置属性值。///<...
C#反射机制详解
六、动态创建对象Assembly对象的 CreateInstance方法 Activator. CreateInstance方法 Type对象的 InvokeMember方法// 使用Assembly的CreateInstance方法来取得对象的实例private void Assembly_CreateI...
C#反射技术的相关使用方法
C#反射技术的相关使用方法C#反射技术的相关使用方法。有参数的构造函数。//构造函数参数列表如下。//public Employe(string userid, string username, int age)Type[] ts=new Type[3]{ typeof(System.S...
动手造轮子:实现一个简单的依赖注入(三) --- 支持属性注入
动手造轮子:实现一个简单的依赖注入(三) --- 支持属性注入动手造轮子:实现一个简单的依赖注入(三) --- 支持属性注入Intro.private obj...
C# 为自定义结构体point 重写equals 方法,并实现自己的强类型Equals方法
C# 为自定义结构体point 重写equals 方法,并实现自己的强类型Equals方法。StructerPoint sp = obj;//struct 类型的对象,隐式继承于Object.ValueType, Object.ValueType里有虚方法 public bool virsua...
《源码探秘 CPython》75. 实例对象是如何创建的?
//调用类型对象的 __new__ 为实例申请内存 obj = type->tp_new(type, args, kwds); type = Py_TYPE(obj); //判断是否定义了初始化函...
C#反射机制(浅析)
(2)使用System.Type.GetType()静态方法,参数为类型的完全限定名。要得到一个外部私有程序集的类型元数据时,字符串参数必须使用类型完全限定名加上类型所在程序集的友好名字。如希望得到一个嵌套在pers...
Python 黑魔法--- 描述器(descriptor)
In [1]: PythonSite.并且vars(ps)中,__dict__并没有get_version这个属性,依据描述器协议,将会调用type(ps).__dict__[''get_version'']描述器的__get__方法,因为ps是实例,因此obje...
java 使用java的newInstance方法创建泛型类的实例
java 使用java的newInstance方法创建泛型类的实例。public class InstanceOfClass { public static void main(String[] args) { Date date=createInstance(Date.String s=createInstance(String.printl...
微信扫码,在手机上查看选中内容