将接口实例分配给实现该接口的类

时间:2010-02-04 15:47:16

标签: c# generics c#-3.0

我有各种实现IActiveRecord的类。

我想要一个方法,我传入一个新创建的类,并将ActiveRecord分配给传入的类的类型。

我已尝试过以下内容但由于某种原因无法编译。

有什么想法吗?

private void AddRecord<T>() where T : class, new()
        {

            IActiveRecord ActiveRecord = (IActiveRecord)T;
        }

4 个答案:

答案 0 :(得分:4)

你的问题不清楚,但如果我理解你要做的事情,你只需要添加约束where T : IActiveRecord。然后你可以说

void AddRecord<T>() where T : IActiveRecord, new() { 
    IActiveRecord activeRecord = new T();
    // more stuff
}

关于你的行

  

IActiveRecord ActiveRecord = (IActiveRecord)T;

这不合法。 T是一个类型参数,而不是您可以强制转换的表达式。

答案 1 :(得分:2)

在您正在显示的方法中,您没有传入某种类型的实例? 我真的不明白你想要实现的目标。

你想这样做:

private void AddRecord<T>() where T : IActiveRecord, new()
{
    IActiveRecord a = new T();
}

答案 2 :(得分:2)

您希望将泛型类型约束为IActiveRecord类型,然后您不需要强制转换:

private void AddRecord<T>() where T : IActiveRecord, new()
{
    IActiveRecord a = new T();
}

答案 3 :(得分:0)

我认为您希望使用以下方法限制您的方法:

private void AddRecord<T>() where T : IActiveRecord, new()

否则,您的问题可能不清楚。