这段为什么要这么写?我晕倒!

论文MVP网 2009-04-28 04:03:40

using System;
using System.Collections.Generic;
using System.Text;
using System.Reflection;

namespace fanshe2
{
class Program
{
static void Main(string[] args)
{
CComand cmd = new CComand();
Type ty = cmd.GetType();
MethodInfo mi = ty.GetMethod("StartMenu");
if (mi == null)
{
Console.WriteLine("获取方法失败");
Console.ReadKey();
return;
}
Console.WriteLine("~~~~~~~~~~~~~~~~~~~~~~~~~~~~~");
//bool ret = (bool)mi.Invoke(cmd, new object[] { "张三" }); //这里为什么要这么写?直接调用函数不可以吗? 如下面这行
bool ret = cmd.StartMenu("张三");
if (ret)
Console.WriteLine("Main:启动成功");
else
Console.WriteLine("Main:启动失败");
Console.WriteLine("~~~~~~~~~~~~~~~~~~~~~~~~~~~~~");
ret = (bool)mi.Invoke(cmd, new object[] { "李四" });
if (ret)
Console.WriteLine("Main:启动成功");
else
Console.WriteLine("Main:启动失败");
Console.WriteLine("按任意键退出");
Console.ReadKey();
}
}

public class CComand
{
private bool ccml = false;
public bool StartMenu(string UserName)
{
Console.WriteLine("操作员:{0}正在操作"+UserName);
if (!ccml)
{
ccml = true;
Console.WriteLine("设备启动成功");
return true;
}
else
{
Console.WriteLine("设备已经启动不能重复启动");
return false;
}
}
}
}




为什么用委托写? 我直接调用函数不就OK了吗? 为什么呢? 谁知道并且举出他的应用情况?
...全文
139 17 打赏 收藏 转发到动态 举报
写回复
用AI写文章
17 条回复
切换为时间正序
请发表友善的回复…
发表回复
justindreams 2009-04-28
  • 打赏
  • 举报
回复
问:为什么要用反射?
答:演示反射如何操作。
_autotest 2009-04-28
  • 打赏
  • 举报
回复
降低代码之间的耦合度,有利于代码的扩展(在不修改原有代码的基础上)
wartim 2009-04-28
  • 打赏
  • 举报
回复
要么因为写的人在写之前刚好学到了反射,想试试手,但用法不当
要么因为写的人本来是写成2个dll的,但后来合并了
LemIST 2009-04-28
  • 打赏
  • 举报
回复
可以利用反射来减少程序之间的耦合
LemIST 2009-04-28
  • 打赏
  • 举报
回复
1工厂模式做的插件系统用,通过配置文件的方式加载DLL,通过反射创建实例。
2数据dump,这个是用在日志系统里,当发生错误时,通过反射导出当前数据对象的值。
论文MVP网 2009-04-28
  • 打赏
  • 举报
回复
哦 这么多人说 代表这段程序确实没必要用反射 这点假设我已经知道了 那么什么情况下必须用反射? 有例子吗? 或者说明下 也行
李世垚 2009-04-28
  • 打赏
  • 举报
回复
这里就是演示 命令模式 下反射其实很有用的 因为你都不知道要调用哪个类的哪个方法 你怎么写?
我姓区不姓区 2009-04-28
  • 打赏
  • 举报
回复
[Quote=引用 8 楼 LemIST 的回复:]
这个例子可能就是在演示反射的用法。
[/Quote]
我也是这么想的,不然在此处用反射一点意义都没有
deyga 2009-04-28
  • 打赏
  • 举报
回复
用反射的方式是方便程序的扩展,但看上去又没有实际的应用上去.....
LemIST 2009-04-28
  • 打赏
  • 举报
回复
这个例子可能就是在演示反射的用法。
LemIST 2009-04-28
  • 打赏
  • 举报
回复
MethodInfo mi = ty.GetMethod("StartMenu");
if (mi == null)
{
Console.WriteLine("获取方法失败");
Console.ReadKey();
return;
}
Console.WriteLine("~~~~~~~~~~~~~~~~~~~~~~~~~~~~~");
//bool ret = (bool)mi.Invoke(cmd, new object[] { "张三" }); //这里为什么要这么写?直接调用函数不可以吗? 如下面这行
bool ret = cmd.StartMenu("张三");


前面不是一直在用反射么?这些代码是做什么用的?
论文MVP网 2009-04-28
  • 打赏
  • 举报
回复
晕倒 这是个例子 那个人就这么写的 呵呵 关键是为什么要这么写 为什么要用反射? 我就不明白 什么情况下要用反射
我姓区不姓区 2009-04-28
  • 打赏
  • 举报
回复
你应该问问写这个程序的人为什么要用反射
zgke 2009-04-28
  • 打赏
  • 举报
回复
当你需要根据变量调用方法的时候 反射最适合
论文MVP网 2009-04-28
  • 打赏
  • 举报
回复
是反射啊 但是 为什么我要用反射? 我直接写我的方法不行吗?
zgke 2009-04-28
  • 打赏
  • 举报
回复
这是反射.没看出委托在那?
ericzhangbo1982111 2009-04-28
  • 打赏
  • 举报
回复
//bool ret = (bool)mi.Invoke(cmd, new object[] { "张三" });
这么调用是用反射

110,534

社区成员

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

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

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