【问题标题】:C# not capturing a methods return value still requires a reference to the returned typeC# 不捕获方法返回值仍然需要对返回类型的引用
【发布时间】:2018-02-01 19:51:26
【问题描述】:

我有两个 DLL 和我的应用程序。我的应用程序引用 DLL1 和 DLL1 引用 DLL2,如下所示:

应用程序 -> DLL1 -> DLL2。

DLL1 包含一个返回 DLL2 类型的方法。此方法在我的应用程序中不可用,因为我的应用程序没有对 DLL2 的引用。这是我的代码:

// My Application
DLL1.DoSomething(""); <-- The type 'MyType' is defined in an assembly that is not references.

// DLL1
public static MyType DoSomething(string x);

// DLL2
public class MyType;

如果我正在捕获DLL1.DoSomething 的输出,我可以理解这一点,但是在这个例子中,我不关心输出。 (我在 DLL2 的其他地方使用它)。有什么办法可以避免引用错误?

【问题讨论】:

  • 你为什么在乎?无论如何你都需要这个程序集。

标签: c#


【解决方案1】:

代码正在捕获返回的结果,它只是立即将其丢弃。编译器并不十分关心您对结果所做的,如果有的话。但是为了理解该方法调用根本,必须知道与其相关的所有类型。

您可以隐藏方法中使用的类型,但是方法签名所宣传的任何类型都必须为调用该方法的任何代码所知。

【讨论】:

  • 我认为编译器不需要知道生成 CIL 的类型(AFAIK void 是唯一需要特殊处理的类型)。当然,编译器编写者假设所有相关类型的知识很方便。
  • @CodesInChaos 您将理论与实现混为一谈。您的第一句话是理论,第二句话是假设实施。对于我们大多数专家来说,理解你的意思是没有问题的,但如果你的评论要被所有读者阅读和理解,你可能应该更清楚地区分两者:)。
【解决方案2】:

不使用常规 C# - 您需要访问返回类型来解析方法。您也许可以通过反射或通过dynamic(如果它是实例方法)调用它,但添加缺少的引用会更容易。在运行时无论如何都需要它,因此添加引用不会丢失任何东西。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-12-14
    • 1970-01-01
    • 1970-01-01
    • 2020-07-29
    相关资源
    最近更新 更多