2011-10-03 91 views
4

我有我已經爲這樣創造了泛型類:C#使用泛型類沒有指定類型

public abstract class MyClass<T> 
{ 
    public T Model 
    { 
     get; 
     protected set; 
    }   
} 

,在某些時候在我的代碼我想要做MyClass的類型的任何東西。例如:

private void MyMethod(object param) 
{ 
    myClassVar = param as MyClass; 
    param.Model....etc 
} 

這可能嗎?或者我需要讓MyClass成爲某個東西的一個子類(MyClassBase)或實現一個接口(IMyClass)?

+0

最可能的是,你應該考慮讓你的參數有一個特定的類型,以避免鑄造。例如,「MyMethod」也可能是通用方法的候選者。 – Groo

回答

8

,我相信你是什麼需要的是做出的MyMethod方法泛型和其類型參數添加約束:

interface IMyInterface 
{ 
    void Foobar(); 
} 

class MyClass<T> 
{ 
    public T Model 
    { 
     get; 
     protected set; 
    } 
} 

private void MyMethod<T>(MyClass<T> param) where T : IMyInterface 
{ 
    param.Model.Foobar(); 
} 
+0

+1這正是我發佈它時的工作原理! –

+0

+1這應該做OP想要的。我不確定這個接口是否有必要,除非他們想用Model來做一些事情。 – Joey

2

是的,你需要。如果泛型類的類型是不明確的,你需要創建一個通用的接口或使用基類...

4

號你需要繼承一個非泛型基類或實現一個非通用接口。

請注意,您將無法使用Model屬性,因爲它不能具有類型(除非將其限制爲基本類型並顯式實現untyped屬性)。