静态变量及静态方法中变量的生命周期问题

findshine 2018-10-31 02:32:21
private static List<String> lstString = new List<String>();

private void Form1_Load(object sender, EventArgs e)
{
reqTest(lstString);

MessageBox.Show(lstString.Count.ToString());
}

private static void reqTest(List<String> lstString)
{
List<String> lstStringaA = new List<String>();
lstStringaA.Add("a");
lstString=lstStringaA;
//如果这里alert lstString的count 会提示1
}




请教,外层定义的lstString是静态的,而且是引用类型,为什么经过reqTest方法改变引用后 为什么count是0而不是1?
...全文
254 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
findshine 2018-10-31
  • 打赏
  • 举报
回复
懂了,多谢!
引用 1 楼 xuzuning 的回复:
reqTest(lstString); //这个 lstString 是 静态属性 lstString
private static void reqTest(List<String> lstString) //这个 lstString 是静态属性 lstString 的引用
lstString=lstStringaA; //这个 lstString 是局对象 lstStringaA 的引用
你对一个引用的对象赋值,就是切断了他原来的引用,而成为新对象的引用
因此 静态属性 lstString 并没有发生改变,自然 MessageBox.Show(lstString.Count.ToString()); 显示的就是 0

你把 private static void reqTest(List<String> lstString)
改成 private static void reqTest()
显示的就是 1 了

注意:这与变量是否是静态的,一点关系都没有
只是 reqTest() 方法是静态的,所以 lstString 属性才被要求是静态的
xuzuning 2018-10-31
  • 打赏
  • 举报
回复
如果你一定需要 private static void reqTest(List<String> lstString) 这样写
那么
List<String> lstStringaA = new List<String>();
lstStringaA.Add("a");
lstString=lstStringaA;
就应改做:
lstString.Add("a");

List<String> lstStringaA = new List<String>();
lstStringaA.Add("a");
lstString.AddRange(lstStringaA);
xuzuning 2018-10-31
  • 打赏
  • 举报
回复
reqTest(lstString); //这个 lstString 是 静态属性 lstString
private static void reqTest(List<String> lstString) //这个 lstString 是静态属性 lstString 的引用
lstString=lstStringaA; //这个 lstString 是局对象 lstStringaA 的引用
你对一个引用的对象赋值,就是切断了他原来的引用,而成为新对象的引用
因此 静态属性 lstString 并没有发生改变,自然 MessageBox.Show(lstString.Count.ToString()); 显示的就是 0

你把 private static void reqTest(List<String> lstString)
改成 private static void reqTest()
显示的就是 1 了

注意:这与变量是否是静态的,一点关系都没有
只是 reqTest() 方法是静态的,所以 lstString 属性才被要求是静态的

110,532

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧