【问题标题】:Mutally exclusive constraints on two methods with the same signature具有相同签名的两个方法的互斥约束
【发布时间】:2012-06-14 19:37:27
【问题描述】:

所以这两个方法具有相同的签名但不同的约束

public static void Method<T>(ref T variable) where T : struct { }

public static void Method<T>(ref T variable) where T : class { }

但它们不能在单个类中定义,因为它们具有相同的签名。但在这种特殊情况下,它们是相互排斥的。 (除非我错了)

我知道您可以在 classstruct 之外添加其他约束,但您不能在同一方法上同时指定 structclass。那么为什么会编译失败呢?

【问题讨论】:

  • 你自己说的,因为他们有相同的签名
  • 您有解决方法吗,因为如果您需要,我已经想到了一个。
  • @AnthonyPegram 谢谢,这是我不知道的。
  • @johnnyGold 不,我不需要解决问题,但这只是我们在工作中遇到的一些事情,我觉得很有趣并想在这里问它:)

标签: c#


【解决方案1】:

generic constraints are not considered part of the method signature(感谢@Anthony 提供链接)。

就编译器而言,您有一个 duplicate 方法 - 相同数量和类型的参数。

【讨论】:

【解决方案2】:

尽管编译器可以很聪明地找出它(它似乎不是),但您不知道如何处理object(因为它可以是classstruct)。

【讨论】:

    【解决方案3】:

    它们在语义上是互斥的,是的。但是编译器认为它们具有相同的“名称”,因此存在歧义。 “名称”在这里表示“方法签名”。

    【讨论】:

    • @L.B "name" 是“方法签名”的俗语,我应该更明确,不要使用挥手速记 :)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-11-14
    • 2021-11-12
    • 2018-11-04
    • 1970-01-01
    • 2020-03-20
    • 1970-01-01
    相关资源
    最近更新 更多