C#使用泛型类而不指定类型

时间:2011-10-03 13:06:53

标签: c# generics

我有一个我创建的泛型类:

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)?

3 个答案:

答案 0 :(得分:11)

我相信您需要的是使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();
}

答案 1 :(得分:5)

没有

您需要继承非泛型基类或实现非泛型接口。

请注意,您将无法使用Model属性,因为它不能具有类型(除非您将其约束为基类型并显式实现非类型化属性)。

答案 2 :(得分:3)

是的,你需要。如果未定义泛型类的类型,则需要创建泛型接口或使用基类...