gpt4 book ai didi

c# - 通用接口(interface)继承(设计问题)

转载 作者:行者123 更新时间:2023-11-30 14:15:13 25 4
gpt4 key购买 nike

我有两个接口(interface); ISetISet<T>

两者都实现了 Add、Remove 和 Clear,但参数类型不同;对象和 T。

现在我有两个选择。要么让ISet<T>继承自 ISet , 或者让他们彼此隔离。

拥有 ISet<T> 的一大好处继承自 ISet当然,我总是可以使用 ISet<T>无论何时我都需要 ISet .但这样做我还必须向具有 T 参数的成员添加"new"修饰符。我不太喜欢"new"修饰符,但也许在这种情况下这是更好的选择?

拥有一个 ISet<T> 感觉很奇怪那也不是 ISet .这是合乎逻辑的假设。我真的不能确切地说出为什么我不喜欢"new"修饰符。就像“goto”关键字一样。我只是尽量不使用它。

你认为我应该在这里做什么?继承还是不继承?


在 .NET 中我们有 ICollection<T>ICollection哪个不继承。 IList<T> 也没有和 IList .但是IEnumerable<T>继承自 IEnumerable .


我知道已经存在的 ISet 接口(interface)(这只是一个例子)

最佳答案

我在其他情况下也遇到过这个问题。我通常通过 ISet<T> 来解决它有它的方法版本,和ISet有自己的异常(exception)对象。就像你提到的那样。除此之外,我还创建了一个名为 BaseSet<T> 的抽象类。实现了 ISet<T>ISet像这样

public abstract class BaseSet<T> : ISet<T>, ISet {
public abstract void Add<T>(T item);

void ISet.Add(object item) {
this.Add((T)item);
}
}

然后只需要继承自BaseSet<T>并实现 ISet<T>最常见场景的接口(interface),但它们仍然可以完全实现 ISet<T>ISet如果BaseSet<T>便利类不符合他们的需要。它还消除了使用 new 的需要关键字。

关于c# - 通用接口(interface)继承(设计问题),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10385451/

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