.Net - C#的引用概念不能没有啊

今天犯了一个低级错误,晕啊!

如下面的代码所示, #1不会对Thread的culture有impact,除非用了#2的语句。

------------------------------------------------------------------------------------------------------------------------------------------------------------------

                        var curUICulInfo = Thread.CurrentThread.CurrentUICulture;


                        if (curUICulInfo.LCID != request.LocaleID)
                        {
                            curUICulInfo = new CultureInfo(request.LocaleID); //------#1------
                            Thread.CurrentThread.CurrentUICulture = new CultureInfo(request.LocaleID); //------#2------

                        }

------------------------------------------------------------------------------------------------------------------------------------------------------------------

在#1处,curUICulInfo会引用到一个新的object,而保持原来的Thread.CurrentThread.CurrentUICulture不变;她们俩是不同的object。

话说起来,如果在c++中,我可能能马上想到#1这里(不吹牛:-) ),这个变量会重新指向一块内存,但是在C#代码中完全没有了这个意识...


以这个为例,栈上的variable会指向managed heap中的object;重新给栈variable赋值,他的指向会变掉。也就是说,基本的build-in类型、struct和class,这些类型的variable,使用她们,或者对她们进行修改,都是对同一份object在操作;但是,class类型的variable,重新赋值,会重新引用到一份new的object上,这样就有了2份;因为他们是.net中的引用,相当于c++中的指针(不是c++的引用,因为指向可以变)。

这就可以联系到一个经典的C/C++面试题。

------------------------------------------------------------------------------------------------------------------------------------------------------------------

   void AllocateMem(Obj* a_ptr)

   {

     a_ptr = new Obj();

   }

   Obj* l_pObj = NULL;

   AllocateMem(l_pObj); //问现在l_pObj还NULL吗?

------------------------------------------------------------------------------------------------------------------------------------------------------------------


虽然.net runtime帮助我们管理了资源,不用担心释放的问题,但是分配的问题还是需要自己处理的;关于分配的一些观念,有很多需要继承C++里的。

Keep it in MIND.

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值