gpt4 book ai didi

c# - 标记接口(interface) : make them inter-castable

转载 作者:太空宇宙 更新时间:2023-11-03 18:34:16 25 4
gpt4 key购买 nike

我有三个用于流畅 API 扩展方法的标记接口(interface):

interface IOne { }
interface ITwo { }
interface IOneOrTwo : IOne, ITwo { }

和以下扩展方法:

public static IOneOrTwo Foo (this IOne obj, string arg)
{
// do something with arg
return obj; // <- possible without cast?
}

问题:是否有可能在不强制转换的情况下返回 obj?通常在这种情况下您需要显式向下转型,但是,这些接口(interface)都不要求底层对象具有任何类型的方法/属性/任何类型。

注意:实际的实现类实现了所有的接口(interface)。

问题 2:为什么实现 IOneITwo 不会自动让实现也属于 IOneOrTwo 类型?

最佳答案

看起来你的实现可能是落后的,可能会回答你的两个问题,让 IOneITwo 实现 IOneOrTwo 而不是另一个一路走来。

interface IOneOrTwo { }
interface IOne: IOneOrTwo { }
interface ITwo: IOneOrTwo { }

//*** This should now work fine ***
public static IOneOrTwo Foo (this IOne obj, string arg)
{
// do something with arg
return obj;
}

澄清:

//This extension method is available to IOne, ITwo, and IOneOrTwo
public static IOneOrTwo Foo2 (this IOneOrTwo obj, string arg)
{
// do something with arg
return obj:
}

//This extension method is available only to IOne
public static IOne Foo2 (this IOne obj, string arg)
{
// do something with arg
return obj:
}

//This extension method is available only to ITwo
public static ITwo Foo2 (this ITwo obj, string arg)
{
// do something with arg
return obj:
}

关于c# - 标记接口(interface) : make them inter-castable,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17841606/

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