我想将通用接口传递给函数:
private I<T> CreateStubRepository<T, I >()
where I : aGenericBaseClass
所以我想知道通用接口是实现基类还是特定接口?
我知道通过使用反射你可以测试它是否是一个泛型类但我没有看到它帮助我
答案 0 :(得分:1)
好。强制使用任何接口有什么意义?我真的不明白(或你的问题)。
你应该更有可能做这样的事情:
public interface IMyRepository<T>
{
}
public class Repository<T> : IMyRepository<T>
{
}
private IMyRepository<TEntity> CreateStubRepository<TEntity>()
{
return new Repository<TEntity>();
}
var repos = CreateStubRepository<User>();
感谢您的回答,但那不是我的要求。我想知道的是,实现通用接口的类是否具有基类还是从接口继承?我不想强迫任何接口更多的问题是传递通用的对象
类不继承接口。他们实施它们。不同的是微妙但重要的。
一个类只能继承另一个类。这意味着如果您没有指定某个类继承自另一个类,它仍将继承自object。无论一个类实现多少接口,这都不会改变。
class MyClass : ICoolInterface // inherits object
class MyList : ArrayList, ISomeInterface // inherits ArrayList
class MyGenericList<T> : IList<T> // inherits object.
答案 1 :(得分:0)
通用或非泛型类可以实现或继承通用或非通用接口和类。唯一的限制是,实现/继承的任何接口/类的完整类型必须是可识别的,因为执行或继承的类的完整类型。例如,Foo&lt; Bar&gt;可能继承自FooBase并实现IDisposable; FnordDuffleBag可能继承自DuffleBag&lt; Fnord&gt;并实现IReachInto&lt; Fnord&gt;。
答案 2 :(得分:0)
感谢所有的评论,我认为我的方向是错误的,我希望的是,当我应用于类时,框架会知道它在构造之前从一个基类或接口说继承了aGenericItemBaseClass运行时的类。
是的我知道我可以创建一个带有类型参数的泛型类并使用它,但这不是我要求的(虽然你可能从我的帖子中得到了这样的印象)。
在运行时我知道在使用反射时我可以通过调用来确定类是否是通用的:IsGenericType如果类型是通用的,则返回true。
所以我想知道可能解释得很糟糕的是,当使用模板类型时,无论如何都要确定该类型是否是泛型类型?似乎答案是否,IL将该类作为通用而不是编译器进行交互。