【发布时间】:2021-02-11 01:14:01
【问题描述】:
我希望创建命名函数:充当Func 的对象,但也有一个包含人工解释名称的字符串字段。
自然的方法是创建一个类NamedFunc<T0,T1> : Func<T0,T1> { string name; },但不幸的是 Func 不是一个类。所以我正在寻找解决方法。
最终目标是我有一个 DoMethod(MyObject 受害者, Funcop 的字母数字表示(出于缓存和兼容性原因)。目前我使用op.toString().hashCode().toString(),但我想要更有意义的东西,这样我就可以真正看到哪个文件属于sum、square等,而不仅仅是看到8202589252、58809258520等。
例如,我想将类似于 NewFunc<double,double> square = new NewFunc<double,double>(x=>x*x , "square"); 的内容传递给 DoMethod,然后在调用 DoMethod(victim, square) 时,DoMethod 会以某种方式恢复该函数的字符串是“square”而不是“Func
有没有可行的方法来做到这一点?还是我在寻找不可能的东西?
【问题讨论】:
-
这对我来说不清楚,但是也许你只是想要一个 delegate/func 的字典?
-
用字典映射函数?
-
“我在寻找几乎不可能的东西吗?” -- 取决于你到底想要什么,目前还不清楚。您绝对不能继承委托类型。但是还有很多其他的选择。参见例如Decorator Pattern。委托还存储目标方法,因此您可以从中使用方法的名称。或者,您可以将委托包装在另一个委托中,该委托将调用结果和字符串作为元组返回。或者……嗯,有很多可能性。你只需要弄清楚你真正想要什么。
-
装饰器模式会很完美,但是根据那个维基百科页面,C#部分仍然使用继承,这在这里不可能吗?也许我没有抓住重点,但实际上我只需要装饰 Func。
-
是的,你还是得把它包起来做装饰器。
标签: c# inheritance delegates