2009-11-09 86 views
0

辯解什麼,似乎像一個真正的noobie問題,但界面我怎麼能實現以下我如何能實現,可以採取許多對象類型

public interface IViewModel { 
     void Map<T>(); 
    } 


    public class CarViewModel : IViewModel 
    { 
     public string Color { get; private set; } 
     public int Tyres { get; private set; } 

public CarViewModel(Car _car) 

    } 

//這是問題的所在 - 可以有很多不同類型的對象,但我希望他們都實現一個Map函數。我想能夠將屬性分配給傳入的對象。我還需要迎合那些需要填充車輛的IList。我懷疑我不使用泛型正確

public void Map<T>(Car _car){ 
Color = _car.Color; 
Tyres = _car.Tyres; 
} 

回答

4

你的意思是?

public interface IViewModel<T> 
{ 
    void Map(T domainObject); 
} 

public class CarViewModel : IViewModel<Car> 
{ 
    public Map(Car domainObject) { ... } 
} 
1

你說:

我懷疑我不使用泛型正確

,你是正確的。此外,您沒有正確使用polymorphism

如果要以多態方式接受幾種不同的類型,它們都有一些共同點,那麼您需要創建一個接口,它是您將使用的所有類型的父類型。您可以在不使用任何泛型的情況下執行此操作。

什麼泛型(也稱爲參數多態)給你是創建一個類型通過另一種類型是參數(因此行爲就像許多不同類型的)的方式。例如,IList<T>通過類型變量T進行了參數化 - 然後IList<string>IList<int>是兩個不同的類型(每個類型都有許多可能的子類型),但您只需編寫一次代碼即可。

您對此設計的實際要求是什麼?你的ViewModel類試圖完成什麼?

+0

喜, 我有一個域對象(汽車爲例),我試圖將它打包成另一個名爲對象CarViewModel「我使用ASP.NET MVC和視圖模型是什麼,是要由控制器檢索 這是相當直接的,但我有許多不同種類的ViewModel對象,我希望它們都在它們各自的域對象上做同樣的事情。 – kurasa

+0

所以我想在所有名爲'Map'的視圖模型對象中使用一個通用函數,例如,它將執行從服務/域對象(s)對ViewModel對象的自己'打包' – kurasa

+0

如果使所有域(模型)對象從接口「IMyObject」繼承,然後構建一個抽象類'AbstractViewModel 其中T:IMyObject'。在那裏填寫你的常見功能。然後使'CarViewModel'成爲'AbstractViewModel '的子類,並根據需要覆蓋功能。這對你有用嗎? –

相關問題