- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有一个类,需要在构造函数中传递不同数量的 Func 委托(delegate)。这些委托(delegate)中的每一个都将指向不同的函数,每个函数具有不同的返回类型,并且具有不同数量的参数( double 类型)。然后将相应地调用每个函数。
问题 1. 现在,为了让使用此类的人更轻松,我正在考虑允许用户传递 List<object>
Func 委托(delegate)的数量。这是否可能,如果可以,我是否能够确定 List<object>
的方法中每个 Func 所需的返回类型和参数数量。被传递给(即构造函数)?
问题 2. 如果上述方法不可行,我是否需要使用返回类型/参数数量的每种不同组合来重载构造函数,并相应地路由每个 Func -_- ...如果没有,有人可以在正确的方向,我觉得我正在以错误的方式处理这个问题......
注意 - 来自 python 背景,我会做这样的事情(我在 c# 方面缺乏经验):
import inspect
def test(x): return x
inspect.getargspec(test)
returns: ArgSpec(args=['x'], varargs=None, keywords=None, defaults=None)
非常感谢
最佳答案
Question 1. Right now, to make things easier for those using this class, I am thinking about allowing the user to pass a List of Func delegates. Is this possible, and if so am I able to determine the return type and number of params required for each Func in the method in which the List is passed to (i.e. the constructor) ?
不是真的。您可以允许 List<Delegate>
(或元素类型为 Delegate
的其他集合),但没有 Func
-具体,有两个原因:
Func
实际上是一个类型家族,具有不同数量的泛型类型参数。就 CLR 而言,这些类型是完全独立的; Func<TResult>
和Func<T, TResult>
与 Action<T>
一样不同和EventHandler
.
即使您只处理相同泛型委托(delegate)类型的多个值,它们可能具有不同类型参数的事实意味着它们对于 CLR 来说是不同的类型;没有办法说List<Func<>>
对于“具有可能不同类型参数的函数列表”。同样,CLR 将它们视为单独的类型 - 尽管这一次至少有一个具有通用泛型类型定义。
Question 2. If the above is not feasible, will I need to overload the constructor with every different combination of return types/number of params and route each Func accordingly
嗯,有几种选择:
将所有参数设为可选,并为每个参数指定默认值 null
,然后在调用构造函数时使用命名参数:
var foo = new Foo(clickHandler: () => ...,
keyHandler: key => ...);
创建一个构建器,以便可以将各种函数设置为属性 - 这与对象初始值设定项语法配合得很好:
var foo = new Foo.Builder {
ClickHandler = () => ...,
KeyHandler = () => ...
}.Build();
当然,后两种解决方案都取决于您是否确实具有特定的指定目的。
如果您能更清楚地了解自己想要实现的目标,将会有所帮助 - 正如 dtb 所说,多态性可能更适合这里。您可以创建一个带有虚拟方法的无操作实现的抽象类,并且实现可以选择要覆盖哪些方法。
关于c# - 具有不同返回类型和参数数量的 Func 委托(delegate)列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15592086/
我有一个加载 View 的 View ,需要将 View 推送到主导航 Controller 。 我已经为每个 View 设置了一个委托(delegate),并且基本上使我的调用沿着“链”返回到主导航
我通过 NSURLConnction 从服务器获取数据,并希望从获取的数组中填充表格 View 。数据出现在 NSURLConnection 委托(delegate)方法的日志中,但我意识到 numb
我已经将我用作标题 View 的 View 子类化,它里面有一些按钮委托(delegate),它工作得很好。 但是,我在 viewController 上方展示了一个 modalViewControl
我希望这听起来像是一个显而易见的问题,但是委托(delegate)返回类型是否也必须与其委托(delegate)的方法的返回类型相匹配? EG,像这样: public static void Save
我想使用 Kotlin 委托(delegate),但我不想在委托(delegate)人之外创建委托(delegate)。委托(delegate)的所有示例都如下所示: interface Worker
我有一个问题: - (void)imagePickerController:(UIImagePickerController *)picker didFinishPickingMediaWithInf
伙计们。我正在寻求帮助。这似乎是一个非常简单的任务,但我可以解决一整天。我正在尝试使用容器 View 创建侧面菜单。当用户按下“更多”按钮(barButtonItem)时,整个 View 向右滑动并出
我正在努力将 UIWebView 迁移到 WKWebView。我已经更改了所有委托(delegate)方法。我需要 WKWebView 委托(delegate)方法等于下面的 UIWebView 委托
我正在学习 VB.NET 中的委托(delegate),但对委托(delegate)类型感到困惑。在阅读有关委托(delegate)的内容时,我了解到委托(delegate)是一种数据类型,可以引用具
我有一个用 Objetive-C 构建的框架。该框架用于连接蓝牙设备并与之交互。 在演示代码中,Objetive-C 委托(delegate)函数如下所示。演示代码由框架创建者提供。 -(void)b
//NewCharts.h #import @interface NewCharts : UIViewController @property(nonatomic,retain)IBOutlet U
我正在努力了解 async/await 并认为我确实了解有关用法的一些事情。但仍然不太清楚在下面的场景中实际好处是什么。 查看 Task.Run 用法。第一种方法使用普通委托(delegate)并使用
我已经尝试了在我的网站上使用 openID 委托(delegate)的所有可能选项,但没有一个方法对我有用。 我的 HTML 文件的 head 部分有“link rel”标签。 我在 HTML 文件的
如何快速创建一个委托(delegate),即 NSUserNotificationCenterDelegate? 最佳答案 这里有一些关于两个 View Controller 之间委托(delegat
我有一个带有数据源的 NSComboBox,当您单击三角形并通过单击它选择其中一个项目时,它可以完美运行。但是,我还希望它允许用户在框中键入以使用自动完成来选择名称。目前,当用户键入时,我希望选择的项
我在代码中定义了以下类和委托(delegate)(为简洁起见,剪掉了许多其他行)。 Public Delegate Sub TimerCallback(canceled As Boolean) Pub
我使用 ansible 2.1 并且我想使用 delegate_to 向一组主机运行命令。我使用 localhost 作为主机参数,并且我想将“touch”命令委托(delegate)给两个 cls
我想通过重载为我的类实现几个构造函数。据我了解,遵循 DRY 原则的惯用方式是使用一种称为委托(delegate)构造函数的功能。我也看到了关于在任何地方使用引用参数并不惜一切代价避免使用指针的想法,
代表们会导致内存泄漏吗? 我的意思是,例如如果一个类A包含一个ADelegate,并且后者指向BMethod(属于B类),这可以防止GC收集A类或B类吗? 如果是这样,我们如何“释放”代表(设置ADe
委托(delegate)命令和路由命令有什么区别? 我读了一些文章说在 MVVM 上使用委托(delegate)命令而不是路由命令。 那么当我们使用 MVVM 时,Delegate Command 相
我是一名优秀的程序员,十分优秀!