基类中的接口问题

时间:2019-06-01 12:35:24

标签: c# generics inheritance interface

好的,我有一个与ObservableCollection一起使用的排序方法,其顶行如下:

public static void Sort<T>(this ObservableCollection<T> collection) where T : IHasID

因此,如您所见,T必须实现接口“ IHasID”。

我发现自己遇到的错误情况是当我将特定的ObservableCollection传递给此方法时,该类型是ChatNodeViewModel。该类的顶行如下:

public class ChatNodeViewModel : GenericViewModelBase

因此,ChatNodeViewModel具有基类GenericViewModelBase。现在,如果我们看一下:

public class GenericViewModelBase : ObservableObject, IComparable, IHasID

我们可以看到它实现了IHasID。因此,ChatNodeViewModel也实现IHasID。还是我想。

调用如下:

Static_Extensions.Extensions.Sort(ChatNodeVMs);

就目前而言,我收到以下错误消息:

错误62类型'HCChatNodeApplication02.ViewModel.ChatNodeViewModel'在通用类型或方法'HCChatNodeApplication02.Static_Extensions.Extensions.Sort(System.Collections.ObjectModel.ObservableCollection)'中不能用作类型参数'T'。从“ HCChatNodeApplication02.ViewModel.ChatNodeViewModel”到“ HCChatNodeApplication02.IHasID”没有隐式引用转换。

那么这是否意味着它没有实现此接口?

所以我尝试对其进行一些更改,以使ChatNodeViewModel看起来像这样:

public class ChatNodeViewModel : GenericViewModelBase, IHasID

现在,它不仅实现接口,而且还继承自实现该接口的基类。这将导致错误消失,并且一切都很好...

...但对我而言这没有意义。当然,如果基类实现了接口,派生类也实现了该接口吗?

还是我在看不见的地方犯了一些明显的错误?

编辑:抱歉,这很明显。实际上有两个IHasID,这是两者之间的冲突。感谢所有花时间提供帮助的人。这样就解决了。

0 个答案:

没有答案