C# 演员名单<;类别>;列出<;界面>;
我有两个接口。其中一个表示“Presenter”类(MVP模式)。它被称为C# 演员名单<;类别>;列出<;界面>;,c#,winforms,casting,C#,Winforms,Casting,我有两个接口。其中一个表示“Presenter”类(MVP模式)。它被称为IPresenter。 另一个接口表示具体Presenter类可以返回的对象之一。它被称为ipresenterement。 此IPresenter接口声明属性 BindingList<IPresenterElement> SourceList { get; } 编译器引发错误,告知具体类未实现接口属性。换句话说,它不能注意到人是一个ipresenterement 我怎样才能克服这种情况 必须准确地实现接口,不
IPresenter
。
另一个接口表示具体Presenter类可以返回的对象之一。它被称为ipresenterement
。
此IPresenter
接口声明属性
BindingList<IPresenterElement> SourceList { get; }
编译器引发错误,告知具体类未实现接口属性。换句话说,它不能注意到人是一个ipresenterement
我怎样才能克服这种情况 必须准确地实现接口,不能尝试更改返回类型。但是,您可以使界面通用
public interface IPresenter<T> where T: IPresenterElement
{
BindingList<T> SourceList { get; }
}
公共接口IPresenter,其中T:ipresenterement
{
BindingList源列表{get;}
}
然后在实现接口时指定具体类型
public class PeoplePresenter : IPresenter<People>
{
public BindingList<People> SourceList { get; }
}
公共类人物演示者:IPresenter
{
公共BindingList源列表{get;}
}
一个简单的解决方案是将IPresenter
界面变得通用:
public interface IPresenter<TPresenterElement> where TPresenterElement : IPresenterElement
{
BindingList<TPresenterElement> SourceList { get; }
// ...
}
public class PeoplePresenter : IPresenter<People>
{
public BindingList<People> SourceList { get; }
// ...
}
公共接口IPresenter,其中TPresenterElement:IPresenterElement
{
BindingList源列表{get;}
// ...
}
公共类人物演示者:IPresenter
{
公共BindingList源列表{get;}
// ...
}
问题是这是否真的有帮助。如果您需要非通用的
IPresenter
接口,那么除了在每个具体实现上都有BindingList
属性并处理与实际数据的同步(例如List
)展示人物类的实现将英文括号标记为code
,这样他们就不会被吃掉了。。!C#仅支持接口和委托的差异,而不支持类的差异。因此,BindingList
永远不会是BindingList
,无论人与ipresenterement
之间的关系如何。您必须准确地实现一个接口,不能尝试更改参数或返回类型。但是,您可以将接口设置为泛型,并指定泛型类型必须是iPresentRelement
,然后您的类可以在实现接口时为泛型类型指定People
。@juharr我知道这一点;但该属性引用的是一个接口。因此,我(当然是错误地)认为,如果具体属性引用了该接口的具体实现,那么它将工作。“我没那么笨。”Zdenëk Jelinek,谢谢你。我会试试你的方法
public interface IPresenter<TPresenterElement> where TPresenterElement : IPresenterElement
{
BindingList<TPresenterElement> SourceList { get; }
// ...
}
public class PeoplePresenter : IPresenter<People>
{
public BindingList<People> SourceList { get; }
// ...
}