泛型反射和普通反射的区别
关于泛型反射和普通反射和用法请在【数据库之家】中搜索站内文章,也百度谷歌一下,这里主要说说泛型反射和普通反射的区别。
泛型反射和普通反射的区别就是泛型参数的处理上。
我们先看一个简单的例子。
- class ClassDemo1<T>
- {
- public void Demo(T t1)
- {
- Console.WriteLine(t1);
- }
- }
要利用反射动态创建该类型实例,并调用 Test 方法,我们可以使用如下方法。
- Type type = typeof(Class1<int>);
- object o = Activator.CreateInstance(type);
- type.InvokeMember("Test", BindingFlags.Default | BindingFlags.InvokeMethod, null, o, new object[] { 123 });
但如果泛型参数是未定的,我们该如何处理呢?其实 Type 已经增加了类似的处理机制。
- static void InvokeTest(Type t, params object[] args)
- {
- Type type = typeof(Class1<>);
- type = type.MakeGenericType(t);
- object o = Activator.CreateInstance(type);
- type.InvokeMember("Test", BindingFlags.Default | BindingFlags.InvokeMethod, null, o, args);
- }
另外一种情况就是泛型方法,我们继续。
- class Class1
- {
- public void Test<T>(T t)
- {
- Console.WriteLine(t);
- }
- }
方法类似,只不过这回使用的是 MethodInfo.MakeGenericMethod()。
- static void InvokeTest(Type t, params object[] args)
- {
- Type type = typeof(Class1);
- object o = Activator.CreateInstance(type);
- MethodInfo method = type.GetMethod("Test", BindingFlags.Instance | BindingFlags.Public);
- method = method.MakeGenericMethod(t);
- method.Invoke(o, args);
- }
============ 欢迎各位老板打赏~ ===========
与本文相关的文章
- · 什么是泛型反射?
- · The instance of entity type ‘Customer’ cannot be tracked because another instance with the same key value for {‘Id’} is already being tracked.
- · .NET8实时更新nginx ip地址归属地
- · 解决.NET Blazor子组件不刷新问题
- · .NET8如何在普通类库中引用 Microsoft.AspNetCore
- · .NET8 Mysql SSL error
- · ASP.NET Core MVC的Razor视图渲染中文乱码的问题
- · .NETCORE 依赖注入服务生命周期
- · asp.net zero改mysql
- · .NET5面试汇总
- · .Net连接Mysql数据库的Convert Zero Datetime日期问题
- · vue使用element-ui中的Message 、MessageBox 、Notification