引用类型里面的静态字段注意细节

今天在技术交流群聊天的时候,一个多年开发经验的妹子群友发出了一个问题。因为这段时间,都在看基础知识,所以就很好奇,也就跟大家一起讨论起来。

代码大概如下:

如上代码,很简单,输出是10 。估计妹子是晕头了,总是纠结为什么不是5。

然后热心的群主(不是我),给妹子解释一会。然后告诉妹子,也有输出5的例子。啪啪啪,敲出如下:

然后群里又开始炸开锅,说为啥引用类型改变值了,输出为啥没变,如是,本屌,就把代码也敲了一遍,一看输出却是10.代码如下:

 

要是不细心看,还真以为有鬼呢,原来本屌多打了一个static.

好啦,现在更加疑惑啦,一向不求甚解的本屌,今天却突然想搞个明白,如是就祭出法宝,调试。

调试之后,发现没加static的那个例子,为啥输出5,是因为

public void change2(a a1)
{
a1 = new a() { testa = 10 };
// a1.testa = 10;
}

这个方法,重新实例化了a1,也就是给a1重新绑定了一个引用地址。因为a1是在这个方法里面实例化的,因为作用域,在如下控制台输出的时候并没有返回这个新引用,输出的时候,还是之前的老地址,如是解惑了为啥输出5,而不是10 。这里要注意的是 引用类型的重新实例化,改变了新引用地址,但是要注意作用域,这里新手容易出错。

a a1=new a();
new Program().change2(a1);
Console.WriteLine(a1.testa);

 

好了,解决了困惑一,下面来讨论下困惑2 ,为啥字段多了个static ,输出的内容就不一样了呢。

好吧,还是调试,但是调试并没有看出什么门道,脑海中想起了,前几天书中所看到的类中的静态字段的知识。如是,就啪啪啪,打出下面的代码:

发现,在同一作用域呢,多次实例化类,类中的静态字段的值,不管是哪个实例改变静态字段的值,所有的实例的静态字段的值,都会发生改变。这就是最需要注意的地方。

加上技术群群号:256718021。这是个C#技术交流群,群主人是个大神,人非常好,大家可以进去,讨论交流,加上瞎扯淡。哈哈。

转载于:https://www.cnblogs.com/MrYuanly/p/5007476.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值