当前位置:  开发笔记 > 开发工具 > 正文

如何制作一个所有实现通用界面的类型安全包?

如何解决《如何制作一个所有实现通用界面的类型安全包?》经验,为你挑选了1个好方法。

需要一个类型安全的项目包,所有项目都实现了通用接口.

希望做的事情如下:

var stringItem = new IItem();
var numberItem = new IItem();
var items = new List>(); //T of course doesn't accomplish what I want

items.Add(stringItem);
items.Add(numberItem);

就像是:

interface IItem
{
   object Value { get; set; }
}

//Update: 2009-03-19 03:08 PM MST
//Added the following interface for clarity of my question

interface IItem : IItem
{
   new T Value { get; set; }
}

然后,我可以:

var items = new List();

但是,我的包里丢失了安全性.所以,我想到了Dictionary:

var dict = new Dictionary>>(); //T is wrong again

dict.Add(typeof(string), new List>); //that sure looks nice

Marc Gravell.. 5

我认为你不能逃避这个IItemIItem不同的事实; 通常的方法是基础接口:

interface IItem {
   object Value {get;}
}
interface IItem : IItem {
   new T Value {get;}
}

这样,您可以编写代码IItem,但实际的实例(通常IItem为某些实例实现T)在内部是强类型的.



1> Marc Gravell..:

我认为你不能逃避这个IItemIItem不同的事实; 通常的方法是基础接口:

interface IItem {
   object Value {get;}
}
interface IItem : IItem {
   new T Value {get;}
}

这样,您可以编写代码IItem,但实际的实例(通常IItem为某些实例实现T)在内部是强类型的.

推荐阅读
罗文彬2502852027
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有