2020-05-19 13:50发布
例:public static class JsonConvert{...public static T DeserializeObject < T> (string value);...}使用反射调... 显示全部
例:public static class JsonConvert{
...
public static T DeserializeObject < T> (string value);
}
使用反射调用此方法。
Invoke(...);要传入一个实例参数,但静态类无法实例化。
InvokeMember(..);不知道怎么指定泛型的类型。而且无法精确定位到此方法(有多个同名方法)。
请问如何解决?
自己测试了一下,使用反射机制,可以调用类里面的静态方法,但是没有找到好的办法调用泛型静态方法,自己测试的代码如下:
class Person
{
public static string Fun(string value)
Console.WriteLine("ttt");
return value;
}
class Program
static void Main(string[] args)
//使用反射机制得到指定类里面的方法
Type t = typeof(Person);
MethodInfo info = t.GetMethod("Fun");
Console.WriteLine(info.Name);
Person p = new Person();
//使用Invoke方法进行回调
object obj= info.Invoke(null,new string[] {"zhangsan"});
//打印的结果是"zhangsan",即调用方法的返回值
Console.WriteLine(obj);
Console.ReadLine();
到网上查了一下,也查不到相关的内容,希望上面的代码能帮到你.
这是功能性的不行
我试了一下, 即便使用委托也无法在Invoke中异步发起泛型和多参方法。
水平所限,望高人指点。
废话不多说直接上代码:
using System;
using System.Reflection;
namespace ConsoleApp1
class Player
public Player() { }
public string Name { get; set; }
public override string ToString()
return Name;
class JsonConvert
public static T DeserializeObject(string value) where T:new()
Console.WriteLine(value);
return new T();
Type t = typeof(JsonConvert);
MethodInfo info = t.GetMethod("DeserializeObject");
info = info.MakeGenericMethod(typeof(Player));
Player player = info.Invoke(null, new string[] { "第1个玩家" }) as Player;
player.Name = "水月花";
Console.WriteLine(player);
运行输出:
PS划重点:使用MakeGenericMethod生成对应的泛型方法,如果是静态方法invoke第1个参数传null就可以。
using System.Threading;
public delegate void MyInvoke(string str);//invoke方法创建委托
private void btnStartThread_Click(object sender, EventArgs e)
Thread thread = new Thread(new ThreadStart(DoWord));
thread.Start();
public void DoWord()
MyInvoke mi = new MyInvoke(SetTxt);//实例化一个委托,并且指定委托方法
BeginInvoke(mi,new object[]{"abc"}); //调用invoke方法
public void SetTxt(string str)//委托对应的方法
txtReceive.Text += "invoke";
this.listView1.Invoke(new EventHandler(delegate
listView1.Items.RemoveAt(i);
}));
希望可以帮助到你
c#这门语言相比较java C++要简单很多,即使是零基础的同学,只要掌握了编程思想,其他的语法,定义就比较简单了,网上有很多免费的视频可以去看看,论坛博客等等,希望可以帮助到你
1 把jar文件导入到unity中2 在 unity中 AndroidJavaClass jc = new AndroidJavaClass(com.android.unityToandroid.UnityPlayerActivity); AndroidJavaObject jo = jc.GetStatic(m_instance); jo.Call(...
visual studio导入字体 首先下载好字体包后解压,里面有个ttf文件夹,Windows系统直接选中所有的字体右键点击安装就好了。安装好字体后建议重启下visual studio然后再进入顶部菜单栏
学习unity引擎的话用C#学习UE4引擎的话用C++
当然。面向组件的开发思想即:每一个组件都是一个类。
Maximum属性:用来获取或设置TrackBar控件可表示的范围上限,即最大值。Minimum属性:用来获取或设置TrackBar控件可表示的范围下限,即最小值。SmallChange属性:用来获取或设置当滑块短距离移动时对Value属性进行增减的值。Value属性:用来获取或设置滑块在...
全天制学习的话, 大概15-20天。学会三大语序、数组、类和对象、属性方法、继承多态、抽象或是接口、集合对象。 之后,还需要掌握Unity引擎的基本操作、鼠标事件,以及最后的UGUI知识。如果说背包涉及到网络数据,还需要掌握数据解析、读取、存储。做一个完整...
都是正常的呀 刚运行了一下 可以正常访问
https://q.cnblogs.com/q/121854/ 可以到这个网站上看一下,回答的比较专业.
string sourceFile = @C:\Users\wangwenping\source\repos\GetActivePro\ConsoleApp1\bin\Debug\;string zipfileName = ./debug;ZipFile.CreateFromDirectory(sourceFile, zipfileName);//源路径,目标路径
使用每个数组元素分别和第一个元素进行比较的方式,比较出最大值。
https://q.cnblogs.com/q/127423/ 可以参考这个网站上的内容,回答的比较专业
可以通过NAT内外网址转换得到
最多设置5个标签!
自己测试了一下,使用反射机制,可以调用类里面的静态方法,但是没有找到好的办法调用泛型静态方法,自己测试的代码如下:
class Person
{
public static string Fun(string value)
{
Console.WriteLine("ttt");
return value;
}
}
class Program
{
static void Main(string[] args)
{
//使用反射机制得到指定类里面的方法
Type t = typeof(Person);
MethodInfo info = t.GetMethod("Fun");
Console.WriteLine(info.Name);
Person p = new Person();
//使用Invoke方法进行回调
object obj= info.Invoke(null,new string[] {"zhangsan"});
//打印的结果是"zhangsan",即调用方法的返回值
Console.WriteLine(obj);
Console.ReadLine();
}
}
到网上查了一下,也查不到相关的内容,希望上面的代码能帮到你.
这是功能性的不行
我试了一下, 即便使用委托也无法在Invoke中异步发起泛型和多参方法。
水平所限,望高人指点。
废话不多说直接上代码:
using System;
using System.Reflection;
namespace ConsoleApp1
{
class Player
{
public Player() { }
public string Name { get; set; }
public override string ToString()
{
return Name;
}
}
class JsonConvert
{
public static T DeserializeObject(string value) where T:new()
{
Console.WriteLine(value);
return new T();
}
}
class Program
{
static void Main(string[] args)
{
Type t = typeof(JsonConvert);
MethodInfo info = t.GetMethod("DeserializeObject");
info = info.MakeGenericMethod(typeof(Player));
Player player = info.Invoke(null, new string[] { "第1个玩家" }) as Player;
player.Name = "水月花";
Console.WriteLine(player);
}
}
}
运行输出:
PS划重点:使用MakeGenericMethod生成对应的泛型方法,如果是静态方法invoke第1个参数传null就可以。
using System.Threading;
public delegate void MyInvoke(string str);//invoke方法创建委托
private void btnStartThread_Click(object sender, EventArgs e)
{
Thread thread = new Thread(new ThreadStart(DoWord));
thread.Start();
}
public void DoWord()
{
MyInvoke mi = new MyInvoke(SetTxt);//实例化一个委托,并且指定委托方法
BeginInvoke(mi,new object[]{"abc"}); //调用invoke方法
}
public void SetTxt(string str)//委托对应的方法
{
txtReceive.Text += "invoke";
}
this.listView1.Invoke(new EventHandler(delegate
{
listView1.Items.RemoveAt(i);
}));
希望可以帮助到你
相关问题推荐
c#这门语言相比较java C++要简单很多,即使是零基础的同学,只要掌握了编程思想,其他的语法,定义就比较简单了,网上有很多免费的视频可以去看看,论坛博客等等,希望可以帮助到你
1 把jar文件导入到unity中2 在 unity中 AndroidJavaClass jc = new AndroidJavaClass(com.android.unityToandroid.UnityPlayerActivity); AndroidJavaObject jo = jc.GetStatic(m_instance); jo.Call(...
visual studio导入字体 首先下载好字体包后解压,里面有个ttf文件夹,Windows系统直接选中所有的字体右键点击安装就好了。安装好字体后建议重启下visual studio然后再进入顶部菜单栏
学习unity引擎的话用C#学习UE4引擎的话用C++
当然。面向组件的开发思想即:每一个组件都是一个类。
Maximum属性:用来获取或设置TrackBar控件可表示的范围上限,即最大值。Minimum属性:用来获取或设置TrackBar控件可表示的范围下限,即最小值。SmallChange属性:用来获取或设置当滑块短距离移动时对Value属性进行增减的值。Value属性:用来获取或设置滑块在...
全天制学习的话, 大概15-20天。学会三大语序、数组、类和对象、属性方法、继承多态、抽象或是接口、集合对象。 之后,还需要掌握Unity引擎的基本操作、鼠标事件,以及最后的UGUI知识。如果说背包涉及到网络数据,还需要掌握数据解析、读取、存储。做一个完整...
都是正常的呀 刚运行了一下 可以正常访问
https://q.cnblogs.com/q/121854/ 可以到这个网站上看一下,回答的比较专业.
string sourceFile = @C:\Users\wangwenping\source\repos\GetActivePro\ConsoleApp1\bin\Debug\;string zipfileName = ./debug;ZipFile.CreateFromDirectory(sourceFile, zipfileName);//源路径,目标路径
使用每个数组元素分别和第一个元素进行比较的方式,比较出最大值。
https://q.cnblogs.com/q/127423/ 可以参考这个网站上的内容,回答的比较专业
可以通过NAT内外网址转换得到