代码之家  ›  专栏  ›  技术社区  ›  Jeroen

方法和约束的唯一性

  •  5
  • Jeroen  · 技术社区  · 14 年前

    public void AddConfig<T>(Config c)  where T : BaseTypeA
    {
    // do stuff
    }
    
    public void AddConfig<T>(Config c)  where T : BaseTypeB
    {
    // do stuff
    }
    

    我很乐意能做到这一点。但我认为这是不可能的。 编译器忽略约束。为什么(我知道这是故意的)。

    我认为我的两个选择是:

    1. 使两个不同的功能。

    对吗?

    2 回复  |  直到 14 年前
        1
  •  4
  •   Matt Mitchell    14 年前

    如果你的意思是在同一个类中,那么你是正确的(我不认为编译器检查以确保BaseTypeA和BaseTypeB不能相互转换,这是你需要检查以确保它们是唯一的方法,例如 where T : BaseTypeA && T !: BaseTypeB 如果你明白我的意思)。

     interface IConfigurable
     {
          void AddConfig(Config c)
     }
    
     public class BaseTypeA : IConfigurable
    
     public class BaseTypeB : IConfigurable
    
        2
  •  4
  •   Eric Lippert    14 年前

    约束不是签名的一部分。那是故意的。

    如果你有兴趣从那些认为约束应该是签名的一部分的人那里读到上百条评论,请查看我的标题巧妙的博客文章的评论 Constraints Are Not Part Of The Signature.