.net 泛型类集合的最佳实践

.net 泛型类集合的最佳实践,.net,generics,collections,.net,Generics,Collections,考虑以下代码: abstract class SomeClassX<T> { // blah } class SomeClassY: SomeClassX<int> { // blah } class SomeClassZ: SomeClassX<long> { // blah } 抽象类SomeClassX { //废话 } 类SomeClassY:SomeClassX { //废话 } 类SomeClassZ:SomeClassX { /

考虑以下代码:

abstract class SomeClassX<T>
{
  // blah
}

class SomeClassY: SomeClassX<int>
{
  // blah
}

class SomeClassZ: SomeClassX<long>
{
  // blah
}
抽象类SomeClassX
{
//废话
}
类SomeClassY:SomeClassX
{
//废话
}
类SomeClassZ:SomeClassX
{
//废话
}
我想要一个SomeClassX的集合,但是,这是不可能的,因为SomeClassX!=不允许使用SomeClassX和List

因此,我的解决方案是让SomeClassX实现一个接口,并将我的集合定义为,其中ISomeClassX是接口:

class CollectionOfSomeClassX: List<ISomeClassX>
{
  // blah
}
public class Entry<T> : IEntry
{
    T Value { get; set; }
    object IEntry.Value { get { return Value; } set { return Value; } }
}
class CollectionOfSomeClassX:列表
{
//废话
}

这是最好的方法,还是有更好的方法?

我要么使用您建议的接口,要么让SomeClassX从另一个类继承。这实际上取决于您需要如何处理集合中的对象。无论它们有什么共同的功能,都应该放在基类中,或者更合适的接口中。

您最好的选择是按照您的建议,创建一个接口
isomoclass
,并实现它。我最近用一个用户偏好和配置文件系统解决了同样的问题,我们想用它来存储各种数据类型。归根结底是:

public interface IEntry
{
    // ...
    object Value { get; set; }
}
可以实例化特定的
条目
,因为
条目
隐式实现了接口:

class CollectionOfSomeClassX: List<ISomeClassX>
{
  // blah
}
public class Entry<T> : IEntry
{
    T Value { get; set; }
    object IEntry.Value { get { return Value; } set { return Value; } }
}

当然,这一切都是有道理的,因为正如
SomeClass
!=
SomeClass
这也是真的
IList
!=
IList

我曾想过这一点,但放弃了这个想法,因为在访问项目时需要强制转换。也可以使用旧系统。集合:-)