【问题标题】:c# class implements and inherits at the same timec#类同时实现和继承
【发布时间】:2013-10-07 22:40:08
【问题描述】:

我要声明一个继承泛型类并实现接口的类,例如:

public class SortableObject
{
    int compare(SortableObejct obj);
}

public class List<T> where T is class
{
    public void add(T obj);
    public T peekCurrent();
}

public class SortedList<T> : List<T> where T : SortableObject, SortableObject
{
    public override int compare(SortableObejct obj);
}

我希望 SortedList&lt;T&gt; 继承自 List&lt;T&gt; 并从 SortableObject 实现,其中 TSortableObject 的子类。 c# 编译器无法编译此类;在我看来,语法不支持这种情况。

有人遇到过这样的困难并有解决办法吗?

【问题讨论】:

  • 你这里没有接口,只有两个父类。 C# 不支持多重继承(从两个或多个父类继承)。
  • 我的错,第一个类实际上是一个接口。

标签: c# class generics inheritance implementation


【解决方案1】:

只需让SortableObject 实现一个接口:

public interface ISortableObject
{
    int compare(SortableObejct obj);
}

public class SortableObject : ISortableObject
{
    int compare(SortableObejct obj);
}

public class SortedList<T> : List<T> where T : SortableObject

这将确保如果它实际上是一个SortableObject,它已经实现了ISortableObject 接口。

【讨论】:

    【解决方案2】:

    首先你需要让你的接口成为一个接口,而不是一个类:

    public interface ISortableObject
    {
        int compare(ISortableObject obj);
    }
    

    接下来,您声明List&lt;T&gt; 的语法不太正确;您没有正确声明通用约束。应该是:

    public class List<T> 
        where T : class
    {
        public void add(T obj);
        public T peekCurrent();
    }
    

    最后,要让一个类从一个类继承、实现一个接口并添加通用约束,您需要按此顺序进行操作。定义了泛型约束后,无法添加接口实现。

    public class SortedList<T> : List<T>, ISortableObject
        where T : ISortableObject
    {
        public override int compare(ISortableObject obj);
    }
    

    【讨论】:

    • 酷,这就是我正在寻找的解决方案。一切都很简单。
    • 谢谢,这正好回答了我的问题。
    猜你喜欢
    • 1970-01-01
    • 2011-11-03
    • 2021-11-25
    • 2016-10-23
    • 1970-01-01
    • 2014-07-10
    • 2012-12-17
    • 1970-01-01
    • 2019-03-23
    相关资源
    最近更新 更多