在线时间:8:00-16:00
迪恩网络APP
随时随地掌握行业动态
扫描二维码
关注迪恩网络微信公众号
/* * 对于初始化对象,每New一次实例化一次对象都要执行一次构造函数,如果构造函数执行时间够长,那么执行多个对象初始化的效率就太低了。 * 一般在初始化的信息不发生变化的情况下,Clone是最好的办法。 * 因为这样既隐藏了创建的细节,又对性能大大的提高。 * 它相当于不用重新初始化对象,而是动态的获得对象运行时的状态。 */ using UnityEngine; using System.Collections; using System; using System.Collections.Generic; public class ClonePrototype : MonoBehaviour { Resume a = new Resume("a"); Resume b; Resume c; // Use this for initialization void Start () { } // Update is called once per frame void Update () { } void OnGUI() { if(GUILayout.Button("******")) { CloneTest(); } } void CloneTest() { a.SetPersonalInfo("19", "man"); a.SetWorkExperience("2001-2005", "----campany"); b = (Resume)a.Clone(); b.ReName("b"); b.SetPersonalInfo("20", "woman"); c = (Resume)b.Clone(); c.ReName("c"); c.SetWorkExperience("2003-2008", "-*---campany"); a.Dispaly(); b.Dispaly(); c.Dispaly(); } } //*因为克隆太常用,所以.NET在System命名空间中提供了ICloneable接口,其中唯一一个方法就是Clone()*// /* //这样只要实现这个接口就完成了原型模式// */ class Resume : ICloneable { private string name; private string sex; private string age; private string timeArea; private string campany; public Resume(string name) { this.name = name; } public void ReName(string name) { this.name = name; } public void SetPersonalInfo(string age,string sex) { this.age = age; this.sex = sex; } public void SetWorkExperience(string timeArea,string campany) { this.timeArea = timeArea; this.campany = campany; } public void Dispaly() /* // 用来实现接口的方法,用来克隆对象// */ { Debug.Log("name : " + name +" |sex : " + sex + " |age : " + age); Debug.Log("TimeAndArea :"+timeArea +" |campany:"+campany); } /* //Clone方法// */ public System.Object Clone() { return (System.Object)this.MemberwiseClone(); /* * MemberwiseClone()f方法,如果字段是值类型的,则对该字段执行逐位复制,如果字段是引用类型的, * 则复制引用,但不复制引用的对象,因此原始对象及其副本引用同一对象。 * 注:当需要复制引用类型的数据的时候,可以在被引用类里添加一个Clone方法放到被引用的类里, 然后引用类里声明一个 * 私有的构造函数,参数为被引用类型,然后函数体里执行Clone方法调用。(俗称:深复制) * 例: * private A a; * Private Resume(A a) * { * this.a = (A)a.Clone(); * } */ } }
|
请发表评论