【问题标题】:Multiple inheritance frome more than one interface来自多个接口的多重继承
【发布时间】:2013-05-11 23:44:56
【问题描述】:

让我有一个模板类(class Entry<T>),我想让这个类继承自两个接口(@98​​7654322@ 和IEquatable<T>),我试过这个:

class Entry<T> where T : IComparable<T>, IEquatable<T>
{
 /* Whatever in the class */
}

我已经尝试了下一个代码:

class Entry<T> : IEquatable<T>, where T : IComparable<T>
{
 /* Whatever in the class */
}

但它们都不能正常工作,我不知道为什么,任何人都可以帮助我知道如何使用多个接口继承?

【问题讨论】:

  • 您应该将接口中的 T 替换为类的名称,因此 IComparable&lt;Entry&lt;T&gt;&gt; 除非您尝试仅比较或等于 T 类型而不是 Entry&lt;T&gt; 类。
  • 当你说它们不能正常工作时,你应该说明你的意思,这样我们才能确切地知道你想要达到的目标。
  • 是的,没错,我尝试了 IComparable> 和 IEquatable> 但它仍然错误,它向我显示以下消息(没有装箱转换或类型参数转换从 'T' 到 'System.IComparable )当我定义一个 Entry 数组时

标签: c# multiple-inheritance


【解决方案1】:

使用以下签名来实现IEquatable&lt;T&gt;IComparable&lt;T&gt;

public class Entry<T> : IComparable<T>, IEquatable<T>
{
    public int CompareTo(T other)
    {
        //compare logic... 
    }

    public bool Equals(T other)
    {
        return CompareTo(other) == 0;
    }
}

您的第一个示例是使用where 子句来形成一个泛型类型约束,它表示“只接受实现IComparable&lt;T&gt;IEquatable&lt;T&gt; 的类型参数”。

您的第二个示例的语法无效。看起来你想说 T IEquatable&lt;T&gt; 必须实现 IComparable&lt;T&gt;。如果你想这样做,那么你还必须将T 约束在class Entry&lt;T&gt; 中。

【讨论】:

  • 如何在Entry类中重新实现(IComparable)方法?
  • @lonelyman 您需要实现IComparable 定义的方法CompareTo 并定义如何比较Entry 的两个实例。你明白吗?
  • public int CompareTo(Entry other) { return this.Key.CompareTo(other); } //这是真的吗????????
  • 我更新了我的帖子。见:msdn.microsoft.com/en-us/library/…
猜你喜欢
  • 2017-03-24
  • 1970-01-01
  • 1970-01-01
  • 2014-12-31
  • 2013-10-22
  • 1970-01-01
  • 2022-08-12
相关资源
最近更新 更多