2017-07-15 72 views
-1

我有兩個接口。其中之一代表「Presenter」類(MVP模式)。它叫做IPresenter。 其他接口表示具體的Presenter類可以返回的對象之一。它叫做IPresenterElement。 這IPresenter接口聲明的屬性鑄造清單<Class>至清單<Interface>

BindingList<IPresenterElement> SourceList { get; } 

但是,當我寫在誰管理People類(implementd IPresenterElement)的對象具體Presenter類屬性如下

BindingList<People> SourceList { get { return peopleList; } } 

編譯器會引發錯誤,告訴具體的類沒有實現接口屬性。換句話說,它不能注意到人是IPresenterElement

我該如何克服這種情況?

+0

顯示人民的實現類 – frozen

+0

馬克作爲'代碼'的蜂窩括號,他們不會被吃掉..! – TaW

+0

C#僅支持接口和委託,但不支持類。因此,無論「People」和「IPresenterElement」之間的關係如何,'BindingList '永遠都不會成爲'BindingList '。 – PetSerAl

回答

1

你必須準確地實現一個接口,你不能嘗試改變返回類型。然而,你可以讓你的界面通用

public interface IPresenter<T> where T: IPresenterElement 
{ 
    BindingList<T> SourceList { get; } 
} 

然後當你實現接口

public class PeoplePresenter : IPresenter<People> 
{ 
    public BindingList<People> SourceList { get; } 
} 
1

指定具體類型簡單的解決辦法是使IPresenter接口通用:

public interface IPresenter<TPresenterElement> where TPresenterElement : IPresenterElement 
{ 
    BindingList<TPresenterElement> SourceList { get; } 

    // ... 
} 

public class PeoplePresenter : IPresenter<People> 
{ 
    public BindingList<People> SourceList { get; } 

    // ... 
} 

問題是這是否真的有幫助。如果你需要的IPresenter接口是非通用的,還有除了只是有在每個具體的實施BindingList<IPresenterElement>財產,並與實際數據處理同步沒有辦法(如List<People>

+0

@ZdenëkJelinek謝謝。我會嘗試你的方法 – marcelo

+0

@ZdenëkJelinek它像一個魅力。謝謝。 – marcelo