C#里面怎么把 类名 和 函数名 作为变量参数传递啊?100分求一个解决方案

fanmingwu 2004-09-14 03:55:53
C#里面怎么把 类名 和 函数名 作为变量参数传递啊?100分求一个解决方案

例如需要将一个方法作为变量传递给 ThreadStart 只能直接写成这样

new ThreadStart(Hotel.run())
new ThreadStart(Customer.run())

能不能有一个更加灵活得方法写成诸如

method=...
new ThreadStart(method)

...全文
2044 18 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
18 条回复
切换为时间正序
请发表友善的回复…
发表回复
wxy0401 2004-09-15
  • 打赏
  • 举报
回复
使用代理delegate

using System;

delegate void DoubleOp(double value);

class MainEntryPoint
{
static void Main()
{
DoubleOp operations = new DoubleOp(MathsOperations.MultiplyByTwo);

ProcessAndDisplayNumber(operations, 2.0);
ProcessAndDisplayNumber(operations, 7.94);
}

static void ProcessAndDisplayNumber(DoubleOp action, double value)
{
Console.WriteLine("\nProcessAndDisplayNumber called with value = " + value);
action(value);
}
}

class MathsOperations
{
public static void MultiplyByTwo(double value)
{
double result = value*2;
Console.WriteLine("Multiplying by 2: {0} gives {1}", value, result);
}
}
lwplay 2004-09-15
  • 打赏
  • 举报
回复
学习
wdwd05 2004-09-15
  • 打赏
  • 举报
回复
...,代理解决
ncowboy 2004-09-15
  • 打赏
  • 举报
回复
楼主,你是要启动一个新的线程么?
你给你的类多个构造函数,或许就能够满足你的要求了。你通过实例化不同的类,就可以达到传递参数给方法的效果。
superhasty 2004-09-15
  • 打赏
  • 举报
回复
MSDN中看到过。
悄悄的回来了 2004-09-15
  • 打赏
  • 举报
回复
用代理.
mywebcom 2004-09-15
  • 打赏
  • 举报
回复
Type type = Type.GetType("MyClassName");//类名作为变两名
shang123guan 2004-09-14
  • 打赏
  • 举报
回复
不要分,只想顶
krjzz 2004-09-14
  • 打赏
  • 举报
回复
天涯,你的程序有问题。
F:\学习\c#程序\ConsoleApplication3\Class1.cs(19): 在不带括号的情况下引用了方法“TestMain.SayB()”
F:\学习\c#程序\ConsoleApplication3\Class1.cs(18): 在不带括号的情况下引用了方法“TestMain.SayA()”
怎么解决啊?谢谢。
khpcg 2004-09-14
  • 打赏
  • 举报
回复
楼主你思考的问题很高深啊
赞成用代理
yellowhwb 2004-09-14
  • 打赏
  • 举报
回复
类名不可以做为类的属性,但在函数里可以作为变量使用!

public class myClass
{
//public int myClass=0;//错误“成员名称不能与它们的封闭类型相同”
public myClass()
{
int myClass;//正确
}
}
dreammaster 2004-09-14
  • 打赏
  • 举报
回复
jiezhi(風依舊) 用的反射方法就是用一个string的classname来做变量。

你是说用一个typeof()的东东吗?
fanmingwu 2004-09-14
  • 打赏
  • 举报
回复
类名可不可以做为变量名啊??
jimh 2004-09-14
  • 打赏
  • 举报
回复
同意天涯的意见
jiezhi 2004-09-14
  • 打赏
  • 举报
回复
/// <summary>
/// 运行已知类名的方法
/// </summary>
/// <param name="className"></param>
/// <param name="methodName"></param>
/// <param name="parameters"></param>
/// <returns></returns>
public static object RunMethod(string className,string methodName,object[] parameters)
{
Type t = Type.GetType(className,true,true);
t = Assembly.GetAssembly(t).GetType(className);
MethodInfo m = t.GetMethod(methodName);
object obj = Activator.CreateInstance(t);
return m.Invoke(obj,parameters);
}
dreammaster 2004-09-14
  • 打赏
  • 举报
回复
用delegate

public class Test {

public delegate viod MyDelegate();

public void ProcessDelegate(MyDelegate myDelegate){
myDelegate();
}
}

public class TestMain{
public static void Main()
{
Test test = new Test();
test.ProcessDelegate(SayA);
test.ProcessDelegate(SayB);
}

public void SayA()
{Console.WriteLine("A");}

public void SayB()
{
Console.WriteLine("B");
}
}
adailee 2004-09-14
  • 打赏
  • 举报
回复
new ThreadStart(Hotel.run())应该这样写:new ThreadStart(Hotel.run)。
这是代理(Delegate)的用法。
test7979 2004-09-14
  • 打赏
  • 举报
回复
可以这样:

methodInfo = 使用反射得到类型的方法
Delegate.CreateDelegate(typeof(ThreadStart), methodInfo)

111,094

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • AIGC Browser
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧