List<T> list = new List<T>; T可以是任意类型或自定义类型或class. 泛型就是同一种类型变量的集合,因此是可变长度的,像数组就是不可变长的,而list.ToArray()就转成了数组,相当于可变长的数组,很方便。 其自带的一些操作的方法也简单易用,像Add,RemoveAt等等,数组可就没这么多好方法用了. 泛型实现了IList等一些接口,可以作为数据源绑定.
优点:性能高,类型安全,二进制代码重用....等等..泛型你可以用.net 提供的一些泛型类也可以自定义泛型类.net提供的自己去看msdn自定制的用法如下: public class Class1<T> { private T member; public void Method(T obj) {} } 这是最简单的. 还有一些默认值.约束啥的.自己找些资料看一下.
我也是刚开始学泛型 petshop最好的例子
List <T> list = new List <T> ; 只用过这个 T一般是一个数据表映射的类
class是对数据的抽象 泛型是对算法的抽象
to be continued. 贴实例,贴代码.贴深入见解.
这个例子说得好..uppublic class Class1<T> { private T member; public void Method(T obj) {} }
let's talk about this subject further for learning,interacting...
T可以是任意类型或自定义类型或class.
泛型就是同一种类型变量的集合,因此是可变长度的,像数组就是不可变长的,而list.ToArray()就转成了数组,相当于可变长的数组,很方便。
其自带的一些操作的方法也简单易用,像Add,RemoveAt等等,数组可就没这么多好方法用了.
泛型实现了IList等一些接口,可以作为数据源绑定.
C#应该是:泛型提供了类型安全但减少多个实现的开销
理由:C#泛型实现是在运行编译,C++泛型实现是在开发时候编译。
public class Class1<T>
{
private T member; public void Method(T obj)
{}
}
这是最简单的.
还有一些默认值.约束啥的.自己找些资料看一下.
petshop最好的例子
只用过这个 T一般是一个数据表映射的类
贴实例,贴代码.贴深入见解.
这个例子说得好..uppublic class Class1<T>
{
private T member; public void Method(T obj)
{}
}
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;
}
}
}
{
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;
}
不过好象用的不多,不外就是list<t>.
我们不能为了泛型而泛型,要搞清楚MS搞这些个东东其目的是什么。
凡事只要你需要它的时候才理解深记刻。比如我的很多个页面后台代码用了泛型之后就只剩下一行。具体请看
http://topic.csdn.net/u/20071202/17/1f68c9b5-817b-49c8-8190-234672f174b8.html
以及欢迎各位高人把经验分享过来...