接口作为属性

use*_*181 5 .net c#

我有一个接口和两个实现它的类.我收到编译错误,我不太清楚为什么.

interface IPerson
{
    ICollection<string> NickNames{get;set;}
}
class ObservablePerson : IPerson
{
    ObservableCollection<string> NickNames{get;set;}
}
class ListPerson : IPerson
{
    List<string> NickNames{get;set;}
}
Run Code Online (Sandbox Code Playgroud)

我在理解为什么这不起作用时遇到了一些麻烦,因为List和ObservableCollection都实现了ICollection.

Ed *_* S. 6

我在理解为什么这不起作用时遇到了一些麻烦,因为List和ObservableCollection都实现了ICollection.

是的,但界面声明ICollection<string>返回了一个.底层类型可以是a ObservableCollection<string>或a List<string>,但签名需要符合接口.安ObservableCollection<string>是一个ICollection<string>,但ICollection<string>不一定是ObservableCollection<string>.

此外,您的方法需要公开(它们目前是私有的).接口不处理私有或受保护的方法,它定义了公共接口.