gpt4 book ai didi

c# - 声明要从接口(interface)方法返回的结构

转载 作者:太空狗 更新时间:2023-10-29 21:15:39 25 4
gpt4 key购买 nike

我正在用 C# (2.0) 编写一个必须返回简单对象集合的方法。通常我会做这样的事情:

class MyWidget
{
struct LittleThing
{
int foo;
DateTime bar;
}

public IList<LittleThing> LookupThings()
{
// etc.
}
}

但是,我必须在接口(interface)中声明这个方法。来电者看不到 MyWidget , 只有一个 IWidget界面。上面的设置在那种情况下不起作用,因为 C# 不允许在接口(interface)内定义类型。进行此类声明的正确或最佳方法是什么?

我想到的直截了当的事情就是简单地声明LittleThing在界面之外。出于几个原因,这看起来不太好。一:它只被那个单一类中的那个单一方法使用过,所以它似乎不是LittleThing应该是一个独立的类型,只是自己漂浮。第二:如果最终为其他类编写了类似的方法,它们将返回不同类型的数据(出于良好的设计原因),我不想用大量仅略有不同的类似名称的结构来混淆命名空间从彼此。

如果我们可以升级我们的 .Net 版本,我会返回一个 Tuple<> ,但这在一段时间内还不是一个选项。

[编辑补充:小对象确实需要包含两个以上的字段,所以KeyValuePair<K,V>不会完全削减它。]

[编辑以进一步添加:IWidget仅由一个类实现,Widget .我认为只有一个类有一个接口(interface)很奇怪,但这样做是为了满足旧的编码策略,该策略要求契约(Contract)始终位于与实现不同的程序集中。上述政策现已取消,但我们没有资源重构整个应用程序并删除所有不必要的接口(interface)。]

最佳做法是什么?

最佳答案

如果“LittleThing”只有两个值,您可以返回 KeyValuePair<TKey,TValue> .

如果超过两个,您始终可以创建自己的 Tuple 类,并在最终迁移到 .NET 4 时将其替换为 .NET 4。

否则,我只会用接口(interface)定义结构,并将其作为 API 的一部分包含在内。命名空间负责命名问题...

关于c# - 声明要从接口(interface)方法返回的结构,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2022793/

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