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关键字,但这正是我所需要的。