有两个类一个class1,一个classDataAccess,class1的属性通过它的静态成员赋值,之所以定义成静态的是因为这个类的属性赋完值后以后还要用到,静态成员的值是通过classDataAccess类查询数据库得到的,其中查全部记录的方法要返回一个Iclass1的数组(因为不是一条class1类型的记录),我可能没说明白,示意代码如下: class class1:Iclass1
{
private static string _str1; //第一个静态成员
private static string _str2; //第二个静态成员
public string P1 //第一个属性
{
get
{
return _str1;
}
}
public string P2 //第二个属性
{
get
{
return _str2;
}
} public class1(){} //无参数构造函数
public class1(string s1,string s2) //有参数构造函数
{
_str1=s1; //类中属性赋值
_str2=s2; //类中属性赋值
} ...... //其他的成员
}class classDataAccess //访问数据库类
{
......
public Iclass1[] selectall() //查询全部数据
{
......
int n=....; //查询到的记录条数
Iclass1[] sel=new Iclass1[n]; //定义一个数组
for(int i=0;i<n;i++)
{
string string1=myds.Tables[0].Rows[i]["str1"].ToString();
string string2=myds.Tables[0].Rows[i]["str2"].ToString();
class1 se=new class1(string1,string2); //通过有参数的构造函数给属性赋值
sel[i]=se; //返回值
}
return sel;
}
}
现在的问题是,sel[i]数组循环完后其中的值一样,都为最后一次查询到的数据,如果我把静态成员改成非静态的就正常了,可是那样的话查询到的数据赋给属性后以后再用就为空了,不知道我说明白没?呵呵,小弟菜鸟,请前辈指点,谢谢:D
{
private static string _str1; //第一个静态成员
private static string _str2; //第二个静态成员
public string P1 //第一个属性
{
get
{
return _str1;
}
}
public string P2 //第二个属性
{
get
{
return _str2;
}
} public class1(){} //无参数构造函数
public class1(string s1,string s2) //有参数构造函数
{
_str1=s1; //类中属性赋值
_str2=s2; //类中属性赋值
} ...... //其他的成员
}class classDataAccess //访问数据库类
{
......
public Iclass1[] selectall() //查询全部数据
{
......
int n=....; //查询到的记录条数
Iclass1[] sel=new Iclass1[n]; //定义一个数组
for(int i=0;i<n;i++)
{
string string1=myds.Tables[0].Rows[i]["str1"].ToString();
string string2=myds.Tables[0].Rows[i]["str2"].ToString();
class1 se=new class1(string1,string2); //通过有参数的构造函数给属性赋值
sel[i]=se; //返回值
}
return sel;
}
}
现在的问题是,sel[i]数组循环完后其中的值一样,都为最后一次查询到的数据,如果我把静态成员改成非静态的就正常了,可是那样的话查询到的数据赋给属性后以后再用就为空了,不知道我说明白没?呵呵,小弟菜鸟,请前辈指点,谢谢:D
class class1:Iclass1
{
private string _str1; //第一个静态成员
private string _str2; //第二个静态成员
public string P1 //第一个属性
{
set
{
_str1=value;
}
get
{
return _str1;
}
}
public string P2 //第二个属性
{
set
{
_str2=value;
}
get
{
return _str2;
}
} public class1(){} //无参数构造函数
public class1(string s1,string s2) //有参数构造函数
{
_str1=s1; //类中属性赋值
_str2=s2; //类中属性赋值
} ...... //其他的成员
}
class classDataAccess //访问数据库类
{
......
public Iclass1[] selectall() //查询全部数据
{
......
int n=....; //查询到的记录条数
Iclass1[] sel=new Iclass1[n]; //定义一个数组
for(int i=0;i<n;i++)
{
string string1=myds.Tables[0].Rows[i]["str1"].ToString();
string string2=myds.Tables[0].Rows[i]["str2"].ToString();
class1 se=new class1(string1,string2); //通过有参数的构造函数给属性赋值
se.P1=string1;
se.P2=string2;
sel[i]=se; //返回值
}
return sel;
}
}
要用到P1,P2直接调用就可以了。如sel[i].P1,sel[i].P2
樓主對靜態對象沒有弄明白啊~~
你的需求用靜態屬性是不行的。所有同類的靜態字段都是相同的。
如果你想保存給sel的值﹐應該將sel定義成public類型的成員﹐放在你需要用的地方。
---------------------------------------------------------------------------------
那个我知道啊,可是在那个sel[i]数组里,每次循环都读一次属性值,sel[0]从这个内存地址取走数据,下一次sel[1]也从这里取,在下一次sel[2]也从这里取......这几次的数据不是都不一样吗?数组中每个成员的地址不一样吧,怎么下一次的会把上一次的影响呢,为什么阿,谢谢
class class1:Iclass1
{
private string _str1; //第一个静态成员
private string _str2; //第二个静态成员
public string P1 //第一个属性
{
set
{
_str1=value;
}
get
{
return _str1;
}
}
public string P2 //第二个属性
{
set
{
_str2=value;
}
get
{
return _str2;
}
} public class1(){} //无参数构造函数
public class1(string s1,string s2) //有参数构造函数
{
_str1=s1; //类中属性赋值
_str2=s2; //类中属性赋值
} ...... //其他的成员
}
class classDataAccess //访问数据库类
{
......
public Iclass1[] selectall() //查询全部数据
{
......
int n=....; //查询到的记录条数
Iclass1[] sel=new Iclass1[n]; //定义一个数组
for(int i=0;i<n;i++)
{
string string1=myds.Tables[0].Rows[i]["str1"].ToString();
string string2=myds.Tables[0].Rows[i]["str2"].ToString();
class1 se=new class1(string1,string2); //通过有参数的构造函数给属性赋值
se.P1=string1;
se.P2=string2;
sel[i]=se; //返回值
}
return sel;
}
}
要用到P1,P2直接调用就可以了。如sel[i].P1,sel[i].P2
-------------------------------------------------
我也想用set阿,可是让我做这个的前辈说为了减少错误可能,让我用
public class1(string s1,string s2) //有参数构造函数
{
_str1=s1; //类中属性赋值
_str2=s2; //类中属性赋值
}
给属性赋值,呵呵
就相当于把那个地址给他了.. 他每回读取的.不是你开始的值. 而是一个固定位置里的值.但这个值它不是不变的.. 正像LZ说的.更成不是静态的就不会出现问题. 那是因为不是静态的每回new出的地址不同.. 希望这个就是LZ要的答案...