gpt4 book ai didi

C# 实现接口(interface)定义的派生类型?

转载 作者:行者123 更新时间:2023-12-02 20:13:56 27 4
gpt4 key购买 nike

我有一个继承树,如下所示:

FooBar 都有一个 Id,通过特定的 Id 类定义。id 类本身派生自公共(public)基类。

我现在想编写一个可以包含 FooBar 的界面,但编译器不允许这样做,我必须使用 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;}
}

最佳答案

泛型在这里可以提供帮助。首先你定义这样的接口(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 { get; set; }
}

实现使用 BarId 的目标和FooId在特定的类(class)。

这两个类也可以转换为 IMyInterface<BaseId>如果您不知道确切的 id 类型:

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

关于C# 实现接口(interface)定义的派生类型?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50103327/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com