当前位置:编程学习 > C#/ASP.NET >>

一个基础类方面的问题

    public abstract class BaseProvider<EntityType, CollectionType>
        where CollectionType : List<EntityType>, new()
        where EntityType : new()
{
    。。。。
}

这是个抽象类,请教一下,这个类的定义是怎么样的?比如where关键字是什么意思,:号是什么意思? --------------------编程问答-------------------- 约束与继承 --------------------编程问答-------------------- 约束。 --------------------编程问答-------------------- public abstract class BaseProvider <chinese wholesalers
ugg, CollectionType>
        where CollectionType : List <EntityType>, new()
        where EntityType : new()  --------------------编程问答-------------------- C#中的泛型只支持显示的约束,因为这样才能保证C#所要求的类型安全,但显示的约束并非时必须的,如果不加约束,泛型类型参数将只能访问System.Object类型中的公有方法。“显式约束”由where子句表达,可以指定“基类约束”,“接口约束”,“构造器约束”,“值类型/引用类型约束”共四种约束。下面的例子来源于李建忠老师的讲座PPT。

1、基类约束:

class A { public void F1() {} } 
  class B { public void F2() {} } 
  class C< S,T>  where S: A // S继承自A 
 where T: B // T继承自B   
{    // 可以在类型为S的变量上调用F1,   // 可以在类型为T的变量上调用F2   }   --------------------编程问答-------------------- 这是泛型约束...去看看MSDN...

where(泛型类型约束)(C# 编程指南)

ps:这个命名不太好,不符合命名约定,容易让调用者混淆...泛型类型应该加T前缀,另外如果可行的话List<T>改成IList<T>或IEnumerable<T>等接口类型适应性更好...如下...

public abstract class BaseProvider <TEntity, TEntityCollection>
  where TEntityCollection : IList<TEntity>, new()
  where TEntity : new() --------------------编程问答-------------------- 泛型约束,C#2.0新特性 --------------------编程问答-------------------- 又看到这个帖子...发现不止是命名的问题,整个一个多余...只需要改成下面这样就满足要求了...

public abstract class BaseProvider <T, IList<T>> 
  where T : new() --------------------编程问答-------------------- 还是有点区别的吧IList <T>和where TEntityCollection : IList <TEntity>, new() 比,TEntityCollection 可以实例化。
引用 7 楼 vrhero 的回复:
又看到这个帖子...发现不止是命名的问题,整个一个多余...只需要改成下面这样就满足要求了...

public abstract class BaseProvider <T, IList <T>>
  where T : new()
--------------------编程问答-------------------- 难道IList<T>不可以实例化?new()约束只是为了声明该泛型类型可以在泛型方法体内实例化...

所以该示例CollectionType的写法纯属多余... --------------------编程问答-------------------- 对啊,就是为了这个约束啊
引用 9 楼 vrhero 的回复:
难道IList <T>不可以实例化?new()约束只是为了声明该泛型类型可以在泛型方法体内实例化...

所以该示例CollectionType的写法纯属多余...
--------------------编程问答-------------------- C#泛型
http://hi.baidu.com/brady_home/blog/item/53a36809d68780aa2fddd467.html

很不错的帖子,参考一下。
补充:.NET技术 ,  C#
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,