主要用途,基本语法,实例,原理.
泛型体现什么思想,有什么优点?
这段内容我还没大接触...想在宝地问一问,来个先入为主.

解决方案 »

  1.   

    http://msdn2.microsoft.com/zh-cn/library/sz6zd40f(VS.80).aspx
      

  2.   

    List<T> list = new List<T>;
    T可以是任意类型或自定义类型或class.
    泛型就是同一种类型变量的集合,因此是可变长度的,像数组就是不可变长的,而list.ToArray()就转成了数组,相当于可变长的数组,很方便。
    其自带的一些操作的方法也简单易用,像Add,RemoveAt等等,数组可就没这么多好方法用了.
    泛型实现了IList等一些接口,可以作为数据源绑定.
      

  3.   

    泛型的优点 通过允许指定泛型类或方法操作的特定类型,泛型功能将类型安全的任务从您转移给了编译器。不需要编写代码来检测数据类型是否正确,因为会在编译时强制使用正确的数据类型。减少了类型强制转换的需要和运行时错误的可能性。 泛型提供了类型安全但没有增加多个实现的开销 这个估计是C++里面的 我看一下C#泛型的机制的根C++的不一样的,
    C#应该是:泛型提供了类型安全但减少多个实现的开销 
    理由:C#泛型实现是在运行编译,C++泛型实现是在开发时候编译。
      

  4.   

    GO ON.中场不休息...
      

  5.   

    优点:性能高,类型安全,二进制代码重用....等等..泛型你可以用.net 提供的一些泛型类也可以自定义泛型类.net提供的自己去看msdn自定制的用法如下:
    public class Class1<T>
    {
       private T member;   public void Method(T obj)
       {}
    }
    这是最简单的.
    还有一些默认值.约束啥的.自己找些资料看一下.
      

  6.   

    我也是刚开始学泛型 
    petshop最好的例子
      

  7.   

    List <T>   list   =   new   List <T> ; 
    只用过这个 T一般是一个数据表映射的类
      

  8.   

    class是对数据的抽象 泛型是对算法的抽象
      

  9.   

    to be continued.
    贴实例,贴代码.贴深入见解.
      

  10.   


    这个例子说得好..uppublic class Class1<T>
    {
       private T member;   public void Method(T obj)
       {}
    }
      

  11.   

    let's talk about this subject further for learning,interacting...
      

  12.   

    范型就是面向算法的思想,终极目标还是代码复用。例如一个排序操作,已经写好了快速排序算法,没有范型的话函数签名写了int就只能对int进行排序,但如果有范型的话,只要该数据类型支持大于号和小于号的操作,就能进行排序,没必要为int, long, float, double等编写多次排序算法。
      

  13.   

    应用三层返回List泛型的新闻类别
    namespace   CompanyWeb.BLL//逻辑层 

            public   class   NewsInfo 
            { 
                    public   List <NewsClass>   GetAllClass(int   PageSize,int   PageIndex) 
                    { 
                            return   NewsClassDal.GetAllClass(PageSize,   PageIndex); 
                    } 
            } 
    } namespace   CompanyWeb.IDAL//接口 

            public   interface   INewsClass 
            { 
                    List <NewsClass>   GetAllClass(int   PageSize,int   PageIndex); 
            } 
    } namespace   CompanyWeb.SQLDAL//数据层 

            public   class   NewsClassInfo   :   INewsClass 
            { 
                    string   con   =   ConfigurationManager.ConnectionStrings["SqlCon"].ConnectionString; 
                    public   List <NewsClass>   GetAllClass(int   PageSize,   int   PageIndex) 
                    { 
                            SqlConnection   sc   =   new   SqlConnection(con) 
                            sc.Open(); 
                            SqlCommand   cmd   =   new   SqlCommand("select   *   from   NewsClass",   sc); 
                            List <NewsClass>   lst   =   new   List <NewsClass> (); 
                            while   (dr.Read()) 
                            { 
                                    NewsClass   Nclass   =   new   NewsClass(); 
                                    Nclass.NewsClassId   =   (int)dr["NewsClass_Id"]; 
                                    Nclass.NewsClassName   =   dr["NewsClass_Name"].ToString(); 
                                    Nclass.NewsClassRe   =   dr["NewsClass_Re"].ToString(); 
                                    lst.Add(Nclass); 
                            } 
                            return   lst; 
                  } 
            } 
    }
      

  14.   

    数据层public List<ProjectBugDetails> getProjectBugListByProjectSiteID(int ProjectSiteID)
            {
                List<ProjectBugDetails> projectbuglist = null;
                try
                {
                    string sqlstring = "SELECT ProjectBug.*,UserInfo.UserName AS UserName, RoleAllot.ProjectName AS ProjectName FROM ProjectBug INNER JOIN UserInfo ON ProjectBug.UserID = UserInfo.UserID INNER JOIN RoleAllot ON ProjectBug.RoleID = RoleAllot.ID AND UserInfo.UserID = dbo.RoleAllot.UserID WHERE (ProjectBug.ProjectSiteID = @ProjectSiteID) order by ProjectBug.testtime desc";
                    SqlParameter parm = new SqlParameter("@ProjectSiteID",SqlDbType .Int);
                    parm.Value = ProjectSiteID;
                    SqlDataReader dr = SqlHelper.ExecuteReader(SqlHelper .ConnectionStringLocalTransaction,CommandType.Text,sqlstring ,parm );
                    projectbuglist = this.getProjectBugListFromReader(dr);
                    dr.Close();
                }
                catch
                {
                    //throw;
                    throw new Exception("通过站点ID得到项目Bug集合失败");
                }
                return projectbuglist;
            }
    数据层私有方法
    /// <summary>
            /// 从Reader中得到ProjectInfo信息
            /// </summary>
            /// <param name="dr"></param>
            /// <returns></returns>
            protected virtual ProjectInfoDetails getProjectInfoFromReader(IDataReader dr)
            {
                ProjectInfoDetails  projectinfo = new ProjectInfoDetails();
               
                 projectinfo.ID = dr.GetInt32(0);
                 projectinfo.ProjectSiteID = dr.GetInt32(1);
                 projectinfo.Title = dr.GetString(2);
                 projectinfo.InfoURL = dr.GetString(3);
                 projectinfo.InfoText = dr.GetString(4);
                 projectinfo.Accessories = dr.GetString(5);
                 projectinfo.Source = dr.GetString(6);
                 projectinfo.PromulgateTime = dr.GetDateTime(7).ToString();
                 projectinfo.UserID = dr.GetString(8);
                 projectinfo.CountNUM = dr.GetInt32(9);
                 projectinfo.Re = dr.GetString(10);
                 projectinfo.UserName = dr.GetString(11);             return projectinfo;
            }
            /// <summary>
            /// 从Reader中得到 ProjectInfo的List
            /// </summary>
            /// <param name="reader"></param>
            /// <returns></returns>
            protected virtual List<ProjectInfoDetails> getProjectInfoListFromReader(IDataReader reader)
            {
                List<ProjectInfoDetails> ProjectInfoList = new List<ProjectInfoDetails>();
                while (reader.Read())
                {                ProjectInfoList.Add(getProjectInfoFromReader(reader));
                }
                return ProjectInfoList;
            }业务层
     public static List<ProjectInfoDetails> getProjectInfoByProjectSiteID(int projectSiteID)
        {
            string key = "ProjectInfo_ProjectSiteID" + projectSiteID.ToString();
            List<ProjectInfoDetails> projectsInfositeID = null;
            try
            {
                if (Globals.ProjectInfo_EnableCaching && BizObject.Cache[key] != null)
                {
                    projectsInfositeID = (List<ProjectInfoDetails>)BizObject.Cache[key];
                }
                else
                {
                    projectsInfositeID = ProjectInfoProvider.Instance.getProjectInfoByProjectSiteID(projectSiteID);                CacheData(key, projectsInfositeID);
                }
            }
            catch (Exception ex)
            {
                WriteLog(ex.InnerException + ex.Message);
            }
            return projectsInfositeID;
        
        }
      

  15.   

    http://hi.baidu.com/nick_ni/blog/item/d5ab3e46f17ed7086b63e5a7.html
      

  16.   

    让代码更灵活.
    不过好象用的不多,不外就是list<t>.
      

  17.   

    赞同代码复用的观点。
    我们不能为了泛型而泛型,要搞清楚MS搞这些个东东其目的是什么。
    凡事只要你需要它的时候才理解深记刻。比如我的很多个页面后台代码用了泛型之后就只剩下一行。具体请看
    http://topic.csdn.net/u/20071202/17/1f68c9b5-817b-49c8-8190-234672f174b8.html
      

  18.   

    谢谢楼上的,看到您的帖子,感觉不错.把BasePage与泛型很好地结合到一起.一定重谢,现在只等贴子加分的时期
    以及欢迎各位高人把经验分享过来...