对象传递注意事项-克隆函数

在面向对象中。大家都知道,对象是引用类型。用c的说法,就是指针。在代码编写时,在对象传递,或者操作的时候。使用不当,会出现大量的空指针,或者是数值异常,但是苦苦找不到异常出现原因。

很多人对对象的传递喜欢这样,如下这几种:

private MyClass mMyClass  = new MyClass();
public MyClass GetMyClass()
{
    return mMyClass;
}

Dictionary<int, int> mDataDic = new Dictionary<int, int>();
public Dictionary<int, int> GetDataDic()
 {
   return mDataDic;
 }
....

我们也知道。这些是指针类型。你想把。假如。你一个数据类中。或一个字典中。保存了当前的某些信息。而其他的代码编写者。或者你自己,在另外的地方。获取该引用时,修改了类里面的某一个数据....

出现问题时,要去找到数据异常的原因。得多麻烦?

最好的办法就是。给数据类写克隆函数。给List Dictionary 一类的new新的。add到新的list中。然后将新list返回。

在定义数据类时,我们写个clone函数在信息类中即可。如下

public class TestData
    {
        public string Name;
        public long HeadId;
        public int HeadLevel;
        public int Id;

        public TestData Clone()
        {

            TestData data = new TestData();
            data.Id = Id;
            data.Name = Name;
            data.HeadLevel = HeadLevel;
            data.HeadId = HeadId;
            return data;
        }
    }

那我们在Get函数中。只需

return TestData.Clone();

就可以了。就是当数据类成员过多的时候,添加clone麻烦点。但是这样可以很好的避开指针被别的用户修改导致数据异常或空指针问题。

本文链接:

https://www.bobsong.net/119.html
1 + 7 =
快来做第一个评论的人吧~