gpt4 book ai didi

C#:ILog 接口(interface)是否应该是或具有 IEnumerable

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

假设我们有这个接口(interface):

public interface ILog
{
void Add(Message message);
}

它当然也应该有一些方法来访问那些添加的消息。但是你觉得怎样才更自然、更正确呢? ILog 实现了 IEnumerable 属性?或者两者兼而有之?或者两者都会有点奇怪和不必要?或者它应该是一个 IEnumerator 而不是 IEnumerable? (或者这可能是完全错误的?还没有完全理解它们之间的区别......)

public interface ILog : IEnumerable<Message>
{
void Add(Message message);
}

public interface ILog
{
IEnumerable<Message> Messages { get; }
void Add(Message message);
}

public interface ILog : IEnumerable<Message>
{
IEnumerable<Message> Messages { get; }
void Add(Message message);
}

这当然可能有点主观,但我想听听其他人的意见。我真的不知道,也没有其他人可以问 :p

最佳答案

我建议 ILog 根本不应该有枚举器——执行日志记录的代码不需要枚举所有消息。

关键是一个类可以实现多个接口(interface) - 因此您可以(并且应该)让每个接口(interface)专注于特定用途。

因此,我将创建第二个接口(interface)(例如,ILogStore)来实现消息的枚举器:

public interface ILogStore
{
IEnumerable<LogMessage> GetMessages();
}

我将其设为成员函数以允许将来可能的重载。比如说,您想从特定子系统获取所有日志消息:

public interface ILogStore
{
IEnumerable<LogMessage> GetMessages();
IEnumerable<LogMessage> GetMessagesBySubsystem(string subsystem);
}

等等。

关于C#:ILog 接口(interface)是否应该是或具有 IEnumerable<Message>?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1042805/

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