2017-10-05 43 views
-1

有沒有辦法讓接口返回空和類?允許接口在C中返回一個類#

接口

public interface IAnimalSlide<C> where <C>:ImageViewer 
{ 
    void endShow(); 
    imageViewer displayImage(); 
    void setNewImage(); 
} 

CatSlide

public class Cat: IAnimalShow 
... 

public System.Windows.Controls.ImageViewer displayImage(){ 
    return displaySingeImage(); 
} 

ImageSlideShow

public class SlideShow 
{ 
    IAnimalSlide = prevSlide; 
    IAnimalSlide = nextSlide; 
    List<IAnimalSlide> animalList; 
} 

... 
animalList.catList.ToList<IAnimalSlide>(); //where catList is a list of Cats 
Canvas.showImage(IAnimalSlide.displayImage()); 

我目前得到那個說

使用泛型類型 'IAnimalSlide' 錯誤需要1種參數

ImageSlideShow調用一個名爲ImageViewer的類,我想在界面中調用它。有沒有一種方法可以將該類納入界面?

回答

2

使用泛型類型「IAnimalSlide」需要1種類型的參數

這個錯誤是因爲你的通用IAnimalSlide名稱時,需要使用到被宣佈爲編譯時類型:

IAnimalSlide<ImageViewer> slide; 

但是你不清楚你在問什麼。你可以在「允許的接口返回一個類型」從接口返回類型:

public interface IAnimalSlide 
{ 
    void EndShow(); 
    ImageViewer DisplayImage(); // <-- Note the casing of the return type 
    void SetNewImage(); 
} 

沒有約束的接口必須是通用的(如果那是你所要求的)。

注:我故意把方法名帕斯卡的情況,因爲這是在C#中的標準做法(這是不是Java,紈絝子弟)。見Capitalization Conventions

+1

謝謝你在那裏的筆記。 – Mitch

2

你有幾件事情在這裏。首先,您的通用接口不使用通用類型參數C。如果要使用派生不同類別從ImageViewer,你可以使用下列內容:

public interface IAnimalSlide<TImageViewer> 
    where TImageViewer : ImageViewer 
{ 
    void endShow(); 
    void setNewImage(); 
    TImageViewer displayImage(); 
} 

注意的是,在接口用於ImageViewer類型是泛型類型參數(這是我改名,使其更具描述性)。然後,引用時,您將包括派生的類型(或)ImageViewer

IAnimalSlide<ImageViewer> 

然而,似乎你只是想使用ImageViewer並不會使用其中的派生類中,其中你不需要通用接口;只需刪除通用型arugment並指定displayImage方法ImageViewer返回類型:

public interface IAnimalSlide 
{ 
    void endShow(); 
    void setNewImage(); 
    ImageViewer displayImage(); 
} 

你會碰到基礎上,你的代碼的其餘爲其他的問題,但是這應該讓你過去你的問題的錯誤。