泛型的 C# 接口访问实现者类型
C# interface access implementers type for generic
有没有办法让接口自动为实现者通用class?
例如,我想创建一个接口,该接口将 return 从实施 class 中委托。 (实际上我希望它是return一个多函数数组,但我在这里进行了简化。)
以下应该有效:
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;
}
}
但是我只希望在通用模板与实现相匹配的地方使用此接口 class。有没有我可以使用的便利,这样我就可以这样写:
public class AClass : IParentFinder
{
...
}
我希望有一些 baseType
参数可以用来指定泛型的基类型。例如:
public interface IParentFinder
{
Func <baseType, int> GetParentIdFunction();
}
为清楚起见进行了编辑
不,C# 中没有执行此操作的功能。
与任何其他参数一样,无论是方法参数还是泛型参数,泛型接口类型参数都需要一个参数。没有参数的参数根本不是参数。
也许 C# vNext 可以实现类似默认通用参数值的东西:
public class A<T> where T : default(string) { ... }
...或者谁知道呢。但是,就目前而言,通用参数 需要一个参数 。而且,毕竟,这不符合您在您的情况下寻找的内容 - 自动神奇推断的通用参数... -.
有没有办法让接口自动为实现者通用class?
例如,我想创建一个接口,该接口将 return 从实施 class 中委托。 (实际上我希望它是return一个多函数数组,但我在这里进行了简化。)
以下应该有效:
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;
}
}
但是我只希望在通用模板与实现相匹配的地方使用此接口 class。有没有我可以使用的便利,这样我就可以这样写:
public class AClass : IParentFinder
{
...
}
我希望有一些 baseType
参数可以用来指定泛型的基类型。例如:
public interface IParentFinder
{
Func <baseType, int> GetParentIdFunction();
}
为清楚起见进行了编辑
不,C# 中没有执行此操作的功能。
与任何其他参数一样,无论是方法参数还是泛型参数,泛型接口类型参数都需要一个参数。没有参数的参数根本不是参数。
也许 C# vNext 可以实现类似默认通用参数值的东西:
public class A<T> where T : default(string) { ... }
...或者谁知道呢。但是,就目前而言,通用参数 需要一个参数 。而且,毕竟,这不符合您在您的情况下寻找的内容 - 自动神奇推断的通用参数... -.