【发布时间】:2015-04-17 11:04:13
【问题描述】:
有没有办法让实现类的接口自动通用?
例如,我想创建一个从实现类返回委托的接口。 (其实我希望它返回一个包含多个函数的数组,但我这里简化了。)
以下应该有效:
public interface IParentFinder<ChildClass>
{
Func<ChildClass, int> GetParentIdFunction();
}
然后要实现它,我必须这样写:
public class AClass : IParentFinder<AClass>
{
int id;
int parentId;
static public Func<AClass, int> GetParentIdFunction()
{
return c => c.parentId;
}
}
但是,我只希望在通用模板与实现类匹配的情况下使用此接口。有什么方便我可以使用的,所以我可以写这个:
public class AClass : IParentFinder
{
...
}
我希望有一些baseType 参数可以用来指定泛型的基本类型。例如:
public interface IParentFinder
{
Func <baseType, int> GetParentIdFunction();
}
为清晰起见进行了编辑
【问题讨论】:
-
我认为你需要考虑一个抽象类,而不是一个接口
-
所以你会像非泛型接口一样实现它并期望它像泛型一样工作?如果你还有一个同名的非泛型接口怎么办?
-
不,没有办法按照你的要求去做,至少不是那样。你想达到什么目的?为什么需要直接返回 lambda 表达式而不是 parent id?
-
我本来希望有一个静态接口,但这些在 C# 中是不可能的。这是为了解决这个问题。我想找出一个类所具有的关系列表,因此我可以将它与我正在寻找的具有特定 ID 的关系列表进行比较。