目前,我有一个抽象的基类Set,它实现了接口ISet。对于有限集合,我派生了一个类FiniteSet,它实现了每个集合方法。然后我可以像这样使用它:
FiniteSet<int> set1 = new FiniteSet<int>(1, 2, 3);
FiniteSet<int> set2 = new FiniteSet<int>(3, 4, 5);
Console.WriteLine(set1); //{1, 2, 3}
Console.WriteLine(set2); //{3, 4, 5}
set1.UnionWith(set2);
Console.WriteLine(set1); //{1, 2, 3, 4, 5}
现在我想要表示一个无限集合。我考虑从set派生另一个抽象类InfiniteSet,然后开发者使用库时必须从InfiniteSet派生自己的类。我会提供常用的集合,例如N、Z、Q和R。
但是我不知道如何实现Subset和GetEnumerator等方法——我甚至开始认为这是不可能的。你怎么以实际的方式枚举一个无限集合,以便与另一个无限集合相交/并集?你如何在代码中检查N是否是R的子集?至于基数的问题……好吧,那可能是一个单独的问题。
所有这些都让我得出结论,我实现无限集合的想法可能是错误的方法。非常感谢您的意见:)。
编辑:为了明确起见,我还想表示不可数无限集合。
编辑2:我认为重要的是要记住,最终目标是实现ISet,这意味着任何解决方案都必须提供(应该提供)实现所有ISet的方法的方法,其中最棘手的是枚举方法和IsSubsetOf方法。
yield return
创建一个可数无限集合非常容易。 - Michael Graczyk