簡體   English   中英

C#實現接口定義的派生類型?

[英]C# Implement derived Types of an Interface Definition?

我有一棵繼承樹,看起來像這樣:

FooBar都有一個Id ,通過特定的Id類定義。 id類本身是從通用基類派生的。

我現在想編寫一個既可以包含Foo也可以包含Bar的接口,但是編譯器不允許這樣做,我必須使用BaseId作為FooBar的類型,但是我想避免這種情況。

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; }
}

實現在特定類中使用BarIdFooId目標。

如果您不知道確切的id類型,則這兩個類也都可以轉換為IMyInterface<BaseId>

Foo foo = new Foo();
// works fine
var asId = (IMyInterface<BaseId>)foo;

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM