首页 新闻 赞助 找找看

C#泛型基类能不能作为容器类的参数?

0
悬赏园豆:10 [已关闭问题]
代码
class Base<T>
{
public T value { get; set; }
}

class Derived1 : Base<int>
{
}

class Derived2 : Base<char>
{
}

class Program
{
static void Main(string[] args)
{
List
<Base> list = new List<Base>();
}
}

上面的C#代码,把泛型基类作为容器类型,编译出错,有没有办法?

王半仙的主页 王半仙 | 初学一级 | 园豆:180
提问于:2010-03-14 11:57
< >
分享
其他回答(5)
0

完全没定义Base这个类啊?

Gray Zhang | 园豆:17610 (专家六级) | 2010-03-14 12:08
0

List<Base<T>> list = new List<Base<T>>();

base带上T

如果你是想 一个list里面存Derived1跟Derived2的话  就定义个接口吧 

class Base<T>:IXXX{}

List<IXXX> list = new List<IXXX>();

bmrxntfj | 园豆:301 (菜鸟二级) | 2010-03-14 12:08
0

        static void Main(string[] args)
        {
            List<Base<int>> list = new List<Base<int>>();
        }

Base<int>才能算作是一个类型。List<>尖括号里必须要一个明确的类型

自由飞 | 园豆:174 (初学一级) | 2010-03-14 12:09
0

List<Base<int>> list = new List<Base<int>>();

查尔斯 | 园豆:3832 (老鸟四级) | 2010-03-14 18:09
C#泛型还是灵活性不够。
支持(0) 反对(0) 王半仙 | 园豆:180 (初学一级) | 2010-03-14 20:27
0

C#的泛型与C++比是确实了弱很多的,但是最主要一点C#的泛型都是类型安全的。所以这个应该说是他的优点吧!C# 泛型类型替换是在运行时执行的,从而为实例化的对象保留了泛型类型信息。

所以你上面的代码在实例化时需要明确的指定实例化的类型。

如List<Base<int>> list=new List<Base<int>>();

西越泽 | 园豆:10775 (专家六级) | 2010-03-15 10:56
0

没有定义Base,你只定义了Base<T>

茂茂 | 园豆:2892 (老鸟四级) | 2010-03-15 10:57
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册