zoukankan      html  css  js  c++  java
  • C#中的复制在unity中使用

    /*
     *      对于初始化对象,每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();
             *      }
             */
        }
    }
  • 相关阅读:
    识人高招:六招看清一个人
    让工作变简单的10种技巧
    推销中的五大提问技巧
    给初次签约大学生的忠告
    只要有钱50岁男人也嫁
    我老公一个月赚15000,但是幸福在哪呢?(转载)
    想法简单,生命更宽!
    中国经典到吐血的谎话
    你的思想是你最大的敌人
    完美人生从哪里起步
  • 原文地址:https://www.cnblogs.com/vital/p/3367950.html
Copyright © 2011-2022 走看看