关于泛型的使用的问题

来源:百度知道 编辑:UC知道 时间:2024/05/17 22:59:10
代码如下:
定义一个泛型的类
public class test<T>
{
public test()
{ }

public DataSet databind(string SqlStr, SqlConnection conn, T gridview)
{

DataSet Ds = Re_ds(SqlStr, conn);
a.DataSource = Ds;
a.DataBind();
return Ds;

}
}
然后在一个页面调用:

string SqlStr = "select * from SoftView where id=" + Request.Form["id"].ToString();

jiben2<DataList> jiben2=new jiben2<DataList>();
jiben2.databind(SqlStr, jiben.connopen(), DataList1);
jiben.connopen()是打开数据库的一个方法。
DataList1 是DataList实例

运行的时候会报错:
编译器错误信息: CS0117: “T”并不包含“DataSource”的定义

请问哪位大虾告诉我,怎么解决这个问题;
在线等,问题解决立即给分
没有少using但是就是不行,而且我试过其他,反正使用T代替实际的类型的话,都不能访问实际类型的属性和方法

不好意思。有个地方错了,正确的是这样:

代码如下:
定义一个泛型的类
public class test<T>
{
public test()
{

楼主要解决的问题应该使用多态而不是范型。我先从您的思路来驳倒你:
首先,T尽管代表所有类型但是他的能力就和object一样很窄。你不应该设想用它来解决它能力以外的问题。

其次,您应该尽量不在您设计的范性类型里调用特化类型的属性和方法,因为那都是特性,很可能不在预期中。T可以解决的只是object定义的4个方法,如ToString()等。又想用<T>又想用特别属性,自相矛盾了吧^-^,所以这个思路就不对。

楼主应该在以前使用过List<T>吧。其中并没有对其特化类型的属性或方法进行调用,因为都被变成object了,没有办法调出来。楼主把自己的test<T>(类名应该大写,不规范!)和微软写的List<T>的用途和用法对比一下就应该能想通了。

解决诸如:包含DataSource属性的一系列类型对算法复用的问题,应该使用多态:选择合适的抽象类型,最高抽象类型应该包含对DataSource属性的定义以满足您尽可能大的复用需求。

总之,多态是用来解决面向对象复用问题的不二法宝。范型是解决代码结构性复用的东西,是70年代过程化编程的产物,用的时候要小心区分才是啊。

问题在这里:
public DataSet databind(string SqlStr, SqlConnection conn, T gridview)

你的gridview是什么东西?他被定义成T类型了,而你的T类型是没有DataSource 属性的,所以下面的这一句就错了。
gridview.DataSource = Ds;

1.有没有少using....
2.看不大懂你这个泛型jiben2<DataList> jiben2=new jiben2<DataList>();
这里你确定没写错吗?

一句两句也说不明白 建议你去看MSDN 那里说的比较全