c# - 我如何在 C# 中表示 Golang 的接口(interface){}?

标签 c# function interface

我正在尝试将一些 Go 代码转换为 C#。在 Go 中,例如:

type MyType interface{}

这是类似object的东西吗?在 C# 或 MyType<T>

在 Go 代码中,有一个由这些接口(interface)组成的数组,每个接口(interface)都返回一个具有不同参数的函数。

我可以返回List of Funcs在 C# 中,但动态参数是问题所在。

我在用 C# 表示它时遇到问题。需要一些指导才能找到正确的路径。

最佳答案

到目前为止,最好的选择是完全避免这种情况。与其同时接受委托(delegate)和调用时应传递给它的参数列表,不如要求所有委托(delegate)都是无参数的(即 Action )。然后调用者有责任,如果他们希望使用给定的参数集运行一个方法,将其包装在一个无参数的方法中,该方法使用一组固定的参数调用给定的函数。在大多数情况下,这可以使用 lambda 方便地完成,因此这对调用者来说不是一个繁重的请求;事实上,通常更容易它们然后指定一个函数和一个参数列表。

然后您的方法签名变为:

public void Foo(Action action) {}

对于调用者来说,它将是:

Foo(() => SomeMethod(firstArgument, secondArgument));

然后你可以制作一个List<Action>从那些您可以轻松调用的操作中,而无需使用反射或动态类型。该解决方案维护所有函数及其参数的完整编译时检查,因此您无需担心处理提供的无效参数。

关于c# - 我如何在 C# 中表示 Golang 的接口(interface){}?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21142608/

相关文章:

node.js - 向 Node.js 中的嵌套接口(interface)添加属性

c# - IS vs. AS vs. IsAssignableFrom - 检查对象类型和接口(interface)时有什么区别?

c# - ASP.NET 为整行数据表/ GridView 添加超链接

c# - Eigen 点到平面算法,返回四元数?

php - css 样式 php 作为函数

php - 非常奇怪,内部服务器错误的未知原因

.net - 检查函数是否在递归函数调用中

java - 为什么不能继承Interface

C# 控制台/CLI 解释器?

c# - 如何将 sql union 转换为 linq