我需要一个子类来实现一个返回Type T的方法,其中T符合以下某些条件:
public abstract class NavEntityController<ChildEntity, GenericNavService_T_Entity ...>
where ChildEntity : NavObservableEntity<GenericNavService_T_Entity>
{
public abstract T ReadAll<T>(bool forceUpdate = false) where T : NavObservableCollection<ChildEntity>;
//others
}
我正在尝试在具体类中实现如下:
public class NavJobController : NavEntityController<NavObservableJob, JobCard_Service, JobCard>
{
public override NavObservableCollection<NavObservableJob> ReadAll(bool forceUpdate = false)
{
//...
}
}
public class NavObservableJob : ... {} //Let's just say this is a class or we are going to go down a whole tree of dependencies
但是我得到的错误是我的“子类没有从父级实现继承的抽象成员ReadAll”。
答案 0 :(得分:2)
抽象类的具体实现需要实现抽象类的抽象成员。
如果你有一个通用的抽象成员,那么你需要一个通用的具体实现。
NavObservableJob
比任何NavObservableCollection<ChildEntity>
实施更专业,更具体,因为NavObservableCollection<T>
不是协变的。
要实现您的目标,您需要将NavObservableCollection<T>
定义为接口。这将允许您将接口定义为协变,例如
public interface INavObservableCollection<out T>
{
// ...
}
注意:使用out
Generic Modifier。
然后更改NavObservableCollection<T>
以便它实现新界面
class NavObservableCollection<T> : INavObservableCollection<T>
{
// ...
}
然后使用接口作为通用约束,
public abstract class NavEntityController<ChildEntity, GenericNavService_T_Entity>
where ChildEntity : NavObservableEntity<GenericNavService_T_Entity>
{
public abstract T ReadAll<T>(bool forceUpdate = false)
where T : INavObservableCollection<ChildEntity>;
//others
}