gpt4 book ai didi

c# - 将对象转换为通用接口(interface)

转载 作者:IT王子 更新时间:2023-10-29 04:21:38 26 4
gpt4 key购买 nike

我有以下界面:

internal interface IRelativeTo<T> where T : IObject
{
T getRelativeTo();
void setRelativeTo(T relativeTo);
}

和一堆(应该)实现它的类,例如:

public class AdminRateShift : IObject, IRelativeTo<AdminRateShift>
{
AdminRateShift getRelativeTo();
void setRelativeTo(AdminRateShift shift);
}

我意识到这三个是不一样的:

IRelativeTo<>
IRelativeTo<AdminRateShift>
IRelativeTo<IObject>

但是,尽管如此,我需要一种方法来处理所有不同的类,例如 AdminRateShift(和 FXRateShift、DetRateShift),它们都应该实现 IRelativeTo。假设我有一个将 AdminRateShift 作为对象返回的函数:

IRelativeTo<IObject> = getObjectThatImplementsRelativeTo(); // returns Object

通过针对接口(interface)编程,我可以做我需要做的事,但实际上我不能将 Object 转换为 IRelativeTo 所以我可以使用它。

这是一个微不足道的例子,但我希望它能阐明我正在尝试做的事情。

最佳答案

如果我理解这个问题,那么最常见的方法是声明一个非通用基础接口(interface),即

internal interface IRelativeTo
{
object getRelativeTo(); // or maybe something else non-generic
void setRelativeTo(object relativeTo);
}
internal interface IRelativeTo<T> : IRelativeTo
where T : IObject
{
new T getRelativeTo();
new void setRelativeTo(T relativeTo);
}

另一种选择是您主要使用泛型进行编码...即您有类似的方法

void DoSomething<T>() where T : IObject
{
IRelativeTo<IObject> foo = // etc
}

如果IRelativeTo<T>DoSomething() 的参数,那么通常您不需要自己指定泛型类型参数 - 编译器会推断它 - 即

DoSomething(foo);

而不是

DoSomething<SomeType>(foo);

这两种方法各有优势。

关于c# - 将对象转换为通用接口(interface),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/222403/

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