zoukankan      html  css  js  c++  java
  • 一段看似简单却不简单、老生常谈的程序

    一童鞋通过email向技术部发了个问题:

    用C#时遇到如下问题,希望哪位高手帮忙解答一下:
    环境:VS2005/2008
     
    //实体
        [Serializable]
        public class TestModel
        {
            public int ID
            {
                set;
                get;
            }
            public string Name
            {
                set;
                get;
            }
        }
    //窗体
       public partial class Form1 : Form
        {
            public Form1()
            {
                InitializeComponent();
            }
            private void button1_Click(object sender, EventArgs e)
            {
                IList<TestModel> modelList = new List<TestModel>();
                new Bridge().Test(modelList);
                int listCount = modelList.Count;
            }
        }
        //测试类
        public class Bridge
        {
            private readonly Test _dal = new Test();
            public IList<TestModel> list = new List<TestModel>();
            public void Test(IList<TestModel> modelList)
            {
                TestModel model = new TestModel();
                list.Add(model);
                modelList = list;
            }
        }
     
     
    listCount 等于几?为什么?
    

    想必有些童鞋也遇到过这个问题,尤其是在面试时,哈哈。

    技术部大家火热的聊起来,最后终于知其一二了。 真是看似简单却不简单呀。

    下面摘录一位架构师给的建议:

    C#中有两种类型的数据,一种是值类型,一种是引用类型

    C#中传递方法参数, 缺省是“值拷贝”模式,也就是说对于值类型变量直接拷贝一份.

     

    那对于函数

    public void Increment( int i )
    {
      i++;  //对于i的修改将是无效的,如需做真正的修改,需要借助于ref关键字
    }

     

    传递方法参数,对于引用类型则拷贝一个指向同一对象的引用副本传递给方法,因此不使用ref,也能在方法内部改变该引用所指向对象的内部状态。

     

    但是某些时候我们需要在方法内部创建一个新的对象实例,并使得原有引用指向这个新的对象。那么问题就来了,由于现在存在两个引用,我们改变的只是传递到方法的引用副本,而该副本在超出方法作用域后既失去作用,而原有的引用依然指向原有对象。modelList 依然为初始值的原因所在)

     

    如想改变原有对像,需要使用ref.


    当看到一些不好的代码时,会发现我还算优秀;当看到优秀的代码时,也才意识到持续学习的重要!--buguge
    本文来自博客园,转载请注明原文链接:https://www.cnblogs.com/buguge/archive/2011/11/18/2254481.html


  • 相关阅读:
    Java实习二
    Java实习一
    从0开始 Java实习 黑白棋
    从0开始 Java学习 packet用法
    解题报告:hdu 1276 士兵队列训练问题
    从0开始 数据结构 AC自动机 模板(from kkke)
    从0开始 数据结构 AC自动机 hdu 2222
    从0开始 数据结构 字典树 hdu1251
    从0开始 图论学习 拓扑排序 链式前向星表示法
    ui爬虫工具-未完成
  • 原文地址:https://www.cnblogs.com/buguge/p/2254481.html
Copyright © 2011-2022 走看看