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

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

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

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

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

method=...
new ThreadStart(method)

...全文
1939 18 打赏 收藏 转发到动态 举报
写回复
用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)
  本套课程为Python基础篇的第5套课程,主要讲解python模块与包的知识体系。共分为三部分:模块与包、PEP8 开发规范、常用函数库。       第一部分:首先讲解Python模块与包的定义与应用。先从Python的三种导入方式(直接导入、全部导入、部分导入)讲起,然后对模块成员函数的可访问性进行总结归纳,末尾就模块的执行顺序、模块的搜索路径以及包的定义与应用进行详细的阐述       第二部分:对Python的PEP8 开发规范进行详细的总结与梳理,主要讨论与总结Python的总体开发规范(编码/缩进/行宽/引号/空行/空格)、注释规范(文档注释/块注释/行注释)、命规范(模块/包//函数/变量)等。        第三部分: 讲解常用函数库,对python语言中最为常用的模块:随机数、日期时间、与数学模块进行详细讲解。       课程末尾需要重点说明的是,本系列课程均设置课堂练习与课后作业集中讲解(录播形式),让初学者通过大量练习与阶段项目等手段有效强化学习效果,保证学习过程中的技能全面提升!教学特点:      使用大量(3D/2D)动画与图示方式,由浅入深讲解Python编程。配之海量课堂练习/课后作业的大量讲解,以及刘老师风趣幽默的课堂幽默感染力,让你轻松加愉悦的心情下开启Python系统学习之旅,系统与深入掌握当今最为火热的人工智能御用编程语言!      本Python教程分为入门、基础、中级、进阶篇,共15套教程组成。突出教学特点如下:      1:为弥补线下“互动性”与知识点的高“吸收率”,每套课程均设置“课堂练习”、“课后作业”、“阶段项目实战”、以及每个章节末尾的“课程笔记”整理环节,不断强化学员知识点的不断巩固与知识体系的梳理,不遗漏任何重要知识点。 以上四大自学环节设置,保证自学过程中知识的反复锤炼与全面吸收,最终获得优秀学习效果!      2:本Python系列课程(15套)从入门篇开始,完全从真正零基础开始讲起,特别适合中小学生以及大学非计算机专业的初学者开始入门!      3:大量采用3D/2D图形化示例讲解,对于Python抽象与复杂问题全部采用3D动画演示。      4:每套课程开始均设置“课程概述”: 讲解本套课程的前导课程、后续课程,以及本套课程的知识体系内容,帮助学习者更好的掌握课程的来龙去脉。   

110,533

社区成员

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

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

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