首页 新闻 会员 周边 捐助

匿名类定义中使用匿名方法和直接使用委托的不同?

0
悬赏园豆:30 [已解决问题] 解决于 2008-10-21 09:32

我们都知道匿名类的定义可以用属性,如:

var obj = new { Name = "crab", Age = 23 };

那么我们如何在匿名类中定义方法呢?就像JAVA中可以对匿名类定义匿名方法。


首先我想到了委托,

定义一个委托 public delegate string SayHelloHandler( string name );

然后定义一个与该委托相同方法签名的方法

public string MySayHello( string name ) { return string.Format( "Hello, {0}!", name ); }

最后定义匿名类

var obj = new { Name = "crab", Age = 23

        , SayHello = new SayHelloHandler( MySayHello ) };

 

调用方法:obj.SayHello( "nanhuacrab" );

经测试这是一种可行的方案。

 

接着我想到了匿名方法,

var obj = new { Name = "crab", Age = 23

 , SayHello = delegete( string name ) { return string.Formate( "Hello, {0}!", name ); } };

经测试此方案不行。

 

最后想到了Lambda表达式,

var obj = new { Name = "crab', Age = 23

, SayHello = (name) => { return string.Formate( "Hello, {0}!", name ); } };

经测试此方案也不行。

 

如果我想实现类似JAVA中匿名类也可以定义匿名方法的功能,除了委托还有其它的方法吗?如果以上有什么地方写错了,请高手指教。

沈啣结的主页 沈啣结 | 初学一级 | 园豆:0
提问于:2008-10-20 15:09
< >
分享
最佳答案
0

using System.Collections.Generic;
using System;

class P
{
    delegate string X(string name);
    static void Main()
    {
var obj = new { Name = "crab",
    Age = 23,
 SayHello = (X)((string name) =>  string.Format( "Hello, {0}!", name ))
    };
        }
}

deerchao | 大侠五级 |园豆:8367 | 2008-10-21 00:01
其他回答(2)
0

现在来看只有委托,似乎没有别的方法了

虽说还能先生成对象,再针对这个对象使用EMIT等动态生成新类,再将对象转成新的类以加上方法,但我想不是变态就不会用这种方案吧

Gray Zhang | 园豆:17610 (专家六级) | 2008-10-20 15:19
0

不错啊。你可以继续下一步了。

RicoRui | 园豆:3663 (老鸟四级) | 2008-10-20 20:42
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册