您的位置:程序门 -> .net技术 -> c#



c#里为何不支持在方法中定义方法


[收藏此页] [打印本页]选择字色:背景色:字体:[][][]


c#里为何不支持在方法中定义方法[已结贴,结贴人:wush007]
发表于:2007-03-08 11:38:40 楼主
c#象如下格式的定义为什么不受支持
                void   m()
                {  
                        void   n()
                        {}

                        n();
                }
而delphi就支持
发表于:2007-03-08 11:59:301楼 得分:0
语法的差异

不过c#里可以在类中定义类

自古以来c里就不支持函数中定义函数
发表于:2007-03-08 12:38:102楼 得分:0
语言的语法不同...

楼主不必细究...
发表于:2007-03-08 13:55:203楼 得分:0
其中一个原因现在的代码编辑器有了折叠功能了。
发表于:2007-03-08 14:03:074楼 得分:2
楼上的放屁!
-------------------
c#中可以在函数中使用匿名函数
发表于:2007-03-08 14:04:055楼 得分:1
我看一个版本的c就可以这么定义........
各种语言和平台间的差异麻
发表于:2007-03-09 10:05:516楼 得分:2
楼上的放屁!
-------------------
c#中可以在函数中使用匿名函数

----------
    1.   2.0版本以上才有匿名函数
    2.   匿名函数不是子函数
        本人认为使用子函数有两点功能
          1)重复调用     2)查看、调试代码方便,看上去也简洁漂亮
      你认为匿名函数有这两点功能吗?而编辑器可折叠实现了第二个功能。
发表于:2007-03-09 10:18:017楼 得分:0
因为clr没法为里面嵌套的这个函数生成il代码,没有地址无法执行
发表于:2007-03-09 12:05:088楼 得分:0
有点搞不清楚,不过确实存在函数里定义函数的很多方便之处(匿名函数只能在事件委托时候使用,不太好主动调用他),
发表于:2007-03-09 12:07:509楼 得分:0
为什么要在method里面定义method?
发表于:2007-03-09 12:14:2010楼 得分:0
本来也可以这么写
private   void   n()
{}
void   m(){n();}

但问题是:
第一:n()的范围不够明确,本来n()只想给m()独用,而现在类里面和m()同级的其他函数也可以调用n()
第二:m()里的局部变量,不能在n()里访问了
发表于:2007-03-09 12:19:1711楼 得分:2
匿名函数就可以实现这种功能了,
发表于:2007-03-09 12:21:2612楼 得分:0
麻烦hongyelzg(风中过客)兄弟贴个事例给我学习学习好吗,谢谢了,(我非常想要这个语法的实现)
发表于:2007-03-09 12:41:2613楼 得分:13
private   void   button1_click(object   sender,   eventargs   e)
{
        int   i   =   1234;
        eventhandler   veventhandler   =   delegate(object   asender,   eventargs   aeventargs)
        {  
                        messagebox.show(i.tostring());  
        };
        invoke(veventhandler);
}
发表于:2007-03-09 13:39:3614楼 得分:0
private   delegate   void   msg(string   s);
                private   void   button1_click(object   sender,   eventargs   e)
                {
                        int   i   =   1234;
                        msg   m   =   delegate(string   s)
                        {   messagebox.show(i.tostring()   +   "; "   +   s);   };

                        m.invoke( "5678 ");                      
                }

恩,试过了,是可以,不过还有点小小的遗憾,就是必须先定义委托的类型,而且不能在button1_click里面定义,非常感谢大家。
发表于:2007-03-09 14:22:4315楼 得分:0
大家还有什么好的想法继续参与讨论·!


快速检索

最新资讯
热门点击