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