C#实现接口定义的派生类型?
我有一个继承树,如下所示:C#实现接口定义的派生类型?,c#,inheritance,interface,C#,Inheritance,Interface,我有一个继承树,如下所示: public interface IMyInterface<out T> where T : BaseId { T Id { get; } } public class Foo : IMyInterface<FooId> { public FooId Id { get; set; } } public class Bar : IMyInterface<BarId> { public BarId Id {
public interface IMyInterface<out T> where T : BaseId {
T Id { get; }
}
public class Foo : IMyInterface<FooId> {
public FooId Id { get; set; }
}
public class Bar : IMyInterface<BarId> {
public BarId Id { get; set; }
}
Foo
和Bar
都有一个Id
,这是通过特定的Id
类定义的。
id
类本身派生自一个公共基类
我现在想写一个界面,它可以包含Foo
和Bar
,
但是编译器不允许这样做,我必须使用BaseId
作为Foo
和Bar
中的类型,但我希望避免这样做
public class BaseId
{
public string Id {get; set;}
}
public class FooId: BaseId
{}
public class BarId: BaseId
{}
public interface MyInterface
{
public BaseId Id {get; set; }
}
public class Foo: MyInterface
{
public FooId Id {get; set;}
}
public class Bar: MyInterface
{
public BarId Id {get; set;}
}
泛型在这方面有帮助。首先定义如下所示的接口:
public interface IMyInterface<out T> where T : BaseId {
T Id { get; }
}
public class Foo : IMyInterface<FooId> {
public FooId Id { get; set; }
}
public class Bar : IMyInterface<BarId> {
public BarId Id { get; set; }
}
正如已经在回答中提供的,泛型在这里会很好地工作。谢谢!我从未在这里使用out关键字,但这正是我所需要的。