C# 对象深拷贝、浅铐贝、直接拷贝

C语言的文件读取与写入操作 学了一年的C语言了,现在回过头来做一下总结。并且博客开了挺长一段时间却没有谢什么实际的东西。现在做下总结,对之后的学习帮助应该挺大的。与大家共勉! 现在,我先来介绍一下C语言的文件读取与写入的原理和具体操作方法。 C语言文件读取与写入是通过将文件看成一个字符序列进行读入和写出的。所以读取与写入文件就用到了指针,而这个指针是一个特殊的指针,我们称为文件指针。 指针名称是 阅读详情
C#中有两种类型变量,一种是值类型变量,一种是引用类型变量。对于前者,copy是属于全盘 复制;而对于后者,一般的copy只是浅copy,相当于只传递一个引用指针一样。因此对于后者进行真正copy的时候,也是最费事的,具体的说,必须为 其实现ICloneable接口中提供的Clone方法。
     浅拷贝(影子克隆):只复制对象的基本类型,对象类型,仍属于原来的引用.
     深拷贝(深度克隆):不紧复制对象的基本类,同时也复制原对象中的对象.就是说完全是新对象产生的.
     浅拷贝和深拷贝之间的区别 :浅拷贝是指将对象中的数值类型的字段拷贝到新的对象中,而对象中的引用型字段则指复制它的一个引用到目标对象。如果改变目标对象中引用型字段的值他将反映在原是对象中,也就是说原始对象中对应的字段也会发生变化。深拷贝与浅拷贝 不 同的是对于引用的处理,深拷贝将会在新对象中创建一个新的和原是对象中对应字段相同(内容相同)的字段,也就是说这个引用和原是对象的引用是不同的,我们 在改变新对象中的这个字段的时候是不会影响到原始对象中对应字段的内容。所以对于原型模式也有不同的两种处理方法:对象的浅拷贝和深拷贝。
     MemberwiseClone 方法创建一个浅表副本,方法是创建一个新对象,然后将当前对象的非静态字段复制到该新对象。如果字段是值类型的,则对该字段执行逐位复制。如果字段是引用 类型,则复制引用但不复制引用的对象;因此,原始对象及其复本引用同一对象。深拷贝,即实现ICloneable接口.ICloneable可用于深拷贝 和浅拷贝。 
    示例代码如下:
     

class  Program
    
{
        
public   class  Sex
        
{
            
private   string  _PSex;
            
public   string  PSex
            
{
                
set
                
{
                    _PSex 
=  value;
                }

                
get
                
{
                    
return  _PSex;
                }

            }

 
        }


        
public   class  Person : ICloneable
        
{
            
private  Sex _pSex  =   new  Sex();
            
public   string  pSex
            
{
                
set
                
{
                    _pSex.PSex 
=  value;
                }

                
get
                
{
                    
return  _pSex.PSex;
                }

            }

            
private   string  _PName;
            
public   string  PName
            
{
                
set
                
{
                    
this ._PName  =  value;
                }

                
get
                
{
                    
return   this ._PName;
                }

            }


            
public   void  ShowPersonInfo()
            
{
                Console.WriteLine(
" ------------------------- " );
                Console.WriteLine(
" Name:{0} Sex:{1} " , _PName, this  .pSex );
                Console.WriteLine(
" ------------------------- " );
            }

            
// 浅拷贝
             public   object  Clone()
            
{
                
return   this .MemberwiseClone();
            }

            
// 深拷贝
             public   object  DeepClone()
            
{
                Person newP 
=   new  Person();
                newP.PName 
=   this ._PName;
                newP.pSex 
=   this .pSex ;
                
return  newP;
            }


        }


        
static   void  Main( string [] args)
        
{
            Console.WriteLine(
" 原对象: " );
            Person p 
=   new  Person();
            p.PName 
=   " JackLee " ;
            p.pSex 
=   " 男 " ;
            p.ShowPersonInfo();


            
// 浅拷贝        
            Person copy  =  (Person)p.Clone();
            
// 深拷贝
            Person dcopy  =  (Person)p.DeepClone();


            Console.WriteLine(
" 修改后的原对象: " );
            p.PName 
=   " JackZhao " ;
            p.pSex 
=   " 女 " ;
            p.ShowPersonInfo();


            Console.WriteLine(
" 修改后的浅拷贝对象: " );
            copy.ShowPersonInfo();
            Console.WriteLine(
" 修改后的深拷贝对象: " );
            dcopy.ShowPersonInfo();

            Console.WriteLine(
" 直接拷贝对象: " );
            Person PP 
=  p;
            PP.ShowPersonInfo();
            
            Console.ReadLine();


        }

       
    }

    运行结果如下:
       
    说明:当然对于深拷贝还可以有其它的实现,比如说用序列化的方法等等。
    在JavaScript中的也有对象的浅拷贝与深拷贝,看下面的例子:
    

<! DOCTYPE HTML PUBLIC  " -//W3C//DTD HTML 4.0 Transitional//EN " >
< HTML >
< HEAD >
< TITLE >  New Document  </ TITLE >
</ HEAD >

< BODY >
< SCRIPT LANGUAGE = " JavaScript " >
<!--

function Object.prototype.clone()
{
    var newObj 
=   new  Object();
    
for (elements  in   this ) {
        newObj[elements] 
=   this [elements];
    }

    
return  newObj;
}


function Object.prototype.cloneAll()
{
    function clonePrototype()
{}
    clonePrototype.prototype 
=   this ;
    var obj 
=   new  clonePrototype();
    
for (var ele  in  obj) {
        
if ( typeof (obj[ele]) == " object " ) obj[ele]  =  obj[ele].cloneAll();
    }

    
return  obj;
}


    var obj1            
=   new  Object();
    obj1.Team            
=   " First " ;
    obj1.Powers            
=   new  Array( " Iori " , " Kyo " );
    obj1.msg            
=  function() {alert()} ;
    obj1.winner            
=   new  Object();
    obj1.winner.name    
=  obj1.Powers[ 0 ];
    obj1.winner.age        
=   23 ;
    obj1.winner.from    
=   " Japan "

    var obj1_clone            
=  obj1.cloneAll();
    obj1_clone.Team            
=   " Second " ;
    obj1_clone.Powers        
=   new  Array( " Jimmy " , " Anndy " );
    obj1_clone.winner.name    
=  obj1_clone.Powers[ 1 ];
    obj1_clone.winner.age    
=   22 ;
    obj1_clone.winner.from    
=   " USA " ;

    msg  
=   " 2003界拳皇单打独斗杯,拳皇挑战赛:  /n/n   A组 对战形式:/n/n "
    msg 
+=  obj1.Team + "  组 ,人员名单: " + obj1.Powers + " /n " ;
    msg 
+=   " 第一轮过后,胜利者为: " + obj1.winner.name  + "  ,参赛者年龄: " + obj1.winner.age + "  ,来自岛国:  " + obj1.winner.from + " /n " ;
    msg 
+=   " /n/n   B组 对战形式:/n/n "
    msg 
+=  obj1_clone.Team + "  组 ,人员名单: " + obj1_clone.Powers + " /n " ;
    msg 
+=   " 第一轮过后,胜利者为: " + obj1_clone.winner.name  + "  ,参赛者年龄: " + obj1_clone.winner.age + "  ,来自国际警察部队:  " + obj1_clone.winner.from + " /n " ;
    alert(msg);

// -->
</ SCRIPT >
</ BODY >
</ HTML >

【ESP32摄像头开发实例】-视频流接入Home Assistant 在这个项目中,我们将使用ESP32-CAM板构建一个IP监控摄像头。ESP32摄像头将托管一个视频流媒体网络服务器,您可以使用网络中的任何设备进行访问。 阅读详情

相关推荐

从涡流求解器到瞬态场:Maxwell 3D里无线充电仿真,选对求解器能省一半计算时间

本文深入探讨了Maxwell 3D在无线充电仿真中涡流求解器与瞬态求解器的选择策略,帮助工程师优化计算效率与精度。通过对比分析两种求解器的适用场景、性能差异及实战技巧,揭示如何根据频率特性、材料非线性和动态过程需求做出精准选择,可节省高达50%的计算时间。特别针对3D线圈模型的无线充电系统设计提供了专业建议。

weixin_26861329的博客 232

拷贝漫画APP安卓和IOS下载安装技巧?

以上便是安卓用户下载拷贝漫画软件的一些方法和技巧。从选择合适的平台、手动下载APK文件,到通过云端同步和开发者模式安装,每一种方法都有其独特的优势。无论您是新手还是资深用户,都可以根据个人需求选择适合的方式,享受流畅的漫画阅读体验。

dfnfdj3435DSD的博客 13万+

RAG项目简历包装指南:从“流水线工人”到“问题解决者”的跃迁(附代码与思路)

本文代码已在Python 3.11 + CUDA 12.3环境测试,部分功能需LangChain 0.2+支持。

Conan_0728的博客 1885

C#实现深度拷贝的几种实现方法

实现深度拷贝的几种方式

lel18570471704的博客 4066

【计算机组成原理实验】状态机实验

理解“状态机”概念,掌握“状态机”思想描述时序系统。通过下列三种基于D触发器的计数器结构,构建状态机的状态转移电路:环形计数器、扭环计数器和条件判断的扭环计数器。基于“状态机”原理,设计一个“交通灯”系统:控制红黄绿信号灯按照以下顺序循环点亮:“绿 黄 红 绿 ……”,红灯、绿灯和黄灯的亮灯持续时间可以通过拨码开关独立设置。红灯和绿灯是持续亮灯模式,黄灯则是闪烁亮灯模式。

Rover_jb的博客 1332

描述符链表(Descriptor Chain)是什么?

描述符链表是硬件加速数据传输的核心数据结构,通过链式描述符(包含地址、长度、控制标志等)实现DMA自动批量处理,显著降低CPU负载。其工作原理为:CPU初始化链表后,硬件按序处理每个描述符,完成自动跳转与中断通知。在网卡收包、NVMe存储等场景中应用广泛,优势包括批处理、低延迟和灵活调度。需注意内存对齐、缓存一致性等实现细节,优化手段包括预分配描述符池、环形缓冲区等。该技术是网络/存储领域提升吞吐量的关键方案。

guigenyi的专栏 777

C#深拷贝

C# 深拷贝一共有四种方法这种方式比较耗费性能,而且遇到对象中有值为null就会报错,不建议使用 方法2:二进制序列化进行深拷贝 这种方法相对性能会高一些,遇到对象值为null时不会报错,使用此方法时需要在拷贝的对象实体上标记可序列化的特性 [Serializable] 方法3:利用xml序列化和反序列化实现深拷贝 这种方式当对象值为null时也不会报错 方法4:利用silverlight DataContractSerializer实现深拷贝 此方法我也没用过...

技术分享博客 6451

基于转录逆转的药物重定向 GPS 模型

GPS是一个基于分子结构预测基因表达扰动的开源平台,由三个模块组成:RCL(在LINCS扰动数据上训练抗噪MLP)、GPS4Drugs(预测新化合物的基因表达谱并进行逆转评分)、MolSearch(基于MCTS的分子优化)。平台使用Morgan指纹和Gene Ontology注释作为特征输入,将基因表达扰动离散为三分类标签。训练数据来自LINCS Phase I的18,746个化合物和978个landmark基因,支持四细胞系独立训练,可用于药物重定向与化合物筛选。

听雨草堂 83

ICloneable和IComparable

对于所有面向对象的语言,复制永远是一个容易引发讨论的题目,C#中也不例外。此类问题在面试中极其容易被问到,我们应该在了解浅拷贝和深拷贝基本概念的基础上,从设计的角度进一步考虑如何支持对象的拷贝。

kalvin_y_liu的博客 897

手把手教你使用 YOLOv11/v8 算法 + PaddleOCR 算法完成车牌检测和车牌识别系统,AI智能体,毛玻璃系统,包括PaddlePaddle安装、数据集预处理、模型训练、AI大模型应用等

手把手教你使用 YOLOv11/v8算法 + PaddleOCR算法完成车牌检测和车牌识别系统,AI智能体,毛玻璃系统,包括PaddlePaddle安装、数据集预处理、模型训练、AI大模型应用等。车牌识别系统支持 蓝牌、绿牌、黄牌、双层车牌等车牌识别。

在职AI算法工程师,擅长计算机视觉,YOLO目标检测、分割等,擅长web、pyqt界面可视化,好内容持续更新中,来这里跟大家一起学习,共同进步 2783

YOLOv8结合GhostNet实现轻量化目标检测:模型设计与性能评测

GhostNet系列的核心是**“幽灵特征图(Ghost Feature Map)”** 概念:通过简单的线性变换(如深度卷积)生成“幽灵特征”,这些特征与原始特征融合后,能以极低的计算成本带来丰富的语义信息。为了突出GhostNet系列的必要性,设计消融实验:分别测试“仅主卷积”“仅幽灵卷积”“GhostNet(主卷积+幽灵卷积)”三种方案的性能,用数据证明“幽灵特征”的不可替代性。简单来说,引入GhostNet系列的YOLOv8,既能体现你的技术深度,又能让毕设的“落地性”大幅提升。

m0_71589036的博客 116

已搞定!拷贝漫画最新版,三合一神器!

正常逛论坛看到有大佬分享了拷贝漫画最新的官方无广告纯净版本,今天给大家分享一下。 拷贝漫画/文末获取今天给大家分享的是拷贝漫画最新v2.3.0的纯净版本。 这个版本的拷贝是已经净化了广告,

u014771868的博客 1万+

YOLOv8改进,YOLOv8添加可变性卷积DCNv2

DCNv2对原始的DCNv1进行了改进,可变形卷积网络的卓越性能源于其适应对象几何变化的能力。通过对其自适应行为的检查,虽然对其神经特征的空间支持比常规的ConvNets更接近于对象结构,但这种支持可能远远超出感兴趣区域,导致特征受到不相关图像内容的影响。为了解决这个问题,我们提出了一种可变形卷积网的重新表述,通过提高建模能力和更强的训练,提高了其专注于相关图像区域的能力。通过更全面地集成网络中的可变形卷积,并引入扩展变形建模范围的调制机制,增强了建模能力。

在职AI算法工程师,擅长计算机视觉,YOLO目标检测、分割等,擅长web、pyqt界面可视化,好内容持续更新中,来这里跟大家一起学习,共同进步 3606

c# 对象深拷贝,浅铐贝,直接拷贝

using System;using System.Collections.Generic;using System.Text;using System.Collections;using System.IO;using System.Runtime.Serialization;using System.Runtime.Serialization.Formatters.Binary;names

Simplicity is more complicated than you think 1226

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

深度学习工具包 DeepLearningToolbox

深度学习工具包Deprecation notice.-----This toolbox is outdated and no longer maintained.There are much better tools available for deep learning than this toolbox, e.g. [Theano](http://deeplearning.net/software/theano/), [torch](http://torch.ch/) or [tensorflow](http://www.tensorflow.org/)I would suggest you use one of the tools mentioned above rather than use this toolbox.Best, Rasmus.DeepLearnToolbox================A Matlab toolbox for Deep Learning.Deep Learning is a new subfield of machine learning that focuses on learning deep hierarchical models of data.It is inspired by the human brain's apparent deep (layered, hierarchical) architecture.A good overview of the theory of Deep Learning theory is[Learning Deep Architectures for AI](http://www.iro.umontreal.ca/~bengioy/papers/ftml_book.pdf)For a more informal introduction, see the following videos by Geoffrey Hinton and Andrew Ng.* [The Next Generation of Neural Networks](http://www.youtube.com/watch?v=AyzOUbkUf3M) (Hinton, 2007)* [Recent Developments in Deep Learning](http://www.youtube.com/watch?v=VdIURAu1-aU) (Hinton, 2010)* [Unsupervised Feature Learning and Deep Learning](http://www.youtube.com/watch?v=ZmNOAtZIgIk) (Ng, 2011)If you use this toolbox in your research please cite [Prediction as a candidate for learning deep hierarchical models of data](http://www2.imm.dtu.dk/pubdb/views/publication_details.php?id=6284)```@MASTERSTHESIS\{IMM2012-06284, author = "R. B. Palm", title = "Prediction as a candidate for learning deep hierarchical models of data", year = "2012",}```Contact: rasmusbergpalm at gmail dot comDirectories included in the toolbox-----------------------------------`NN/` - A library for Feedforward Backpropagation Neural Networks`CNN/` - A library for Convolutional Neural Networks`DBN/` - A library for Deep Belief Networks`SAE/` - A library for Stacked Auto-Encoders`CAE/` - A library for Convolutional Auto-Encoders`util/` - Utility functions used by the libraries`data/` - Data used by the examples`tests/` - unit tests to verify toolbox is workingFor references on each library check REFS.mdSetup-----1. Download.2. addpath(genpath('DeepLearnToolbox'));Example: Deep Belief Network---------------------```matlabfunction test_example_DBNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit RBM and visualize its weightsrand('state',0)dbn.sizes = [100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);figure; visualize(dbn.rbm{1}.W'); % Visualize the RBM weights%% ex2 train a 100-100 hidden unit DBN and use its weights to initialize a NNrand('state',0)%train dbndbn.sizes = [100 100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);%unfold dbn to nnnn = dbnunfoldtonn(dbn, 10);nn.activation_function = 'sigm';%train nnopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.10, 'Too big error');```Example: Stacked Auto-Encoders---------------------```matlabfunction test_example_SAEload mnist_uint8;train_x = double(train_x)/255;test_x = double(test_x)/255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit SDAE and use it to initialize a FFNN% Setup and train a stacked denoising autoencoder (SDAE)rand('state',0)sae = saesetup([784 100]);sae.ae{1}.activation_function = 'sigm';sae.ae{1}.learningRate = 1;sae.ae{1}.inputZeroMaskedFraction = 0.5;opts.numepochs = 1;opts.batchsize = 100;sae = saetrain(sae, train_x, opts);visualize(sae.ae{1}.W{1}(:,2:end)')% Use the SDAE to initialize a FFNNnn = nnsetup([784 100 10]);nn.activation_function = 'sigm';nn.learningRate = 1;nn.W{1} = sae.ae{1}.W{1};% Train the FFNNopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.16, 'Too big error');```Example: Convolutional Neural Nets---------------------```matlabfunction test_example_CNNload mnist_uint8;train_x = double(reshape(train_x',28,28,60000))/255;test_x = double(reshape(test_x',28,28,10000))/255;train_y = double(train_y');test_y = double(test_y');%% ex1 Train a 6c-2s-12c-2s Convolutional neural network %will run 1 epoch in about 200 second and get around 11% error. %With 100 epochs you'll get around 1.2% errorrand('state',0)cnn.layers = { struct('type', 'i') %input layer struct('type', 'c', 'outputmaps', 6, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %sub sampling layer struct('type', 'c', 'outputmaps', 12, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %subsampling layer};cnn = cnnsetup(cnn, train_x, train_y);opts.alpha = 1;opts.batchsize = 50;opts.numepochs = 1;cnn = cnntrain(cnn, train_x, train_y, opts);[er, bad] = cnntest(cnn, test_x, test_y);%plot mean squared errorfigure; plot(cnn.rL);assert(er<0.12, 'Too big error');```Example: Neural Networks---------------------```matlabfunction test_example_NNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);% normalize[train_x, mu, sigma] = zscore(train_x);test_x = normalize(test_x, mu, sigma);%% ex1 vanilla neural netrand('state',0)nn = nnsetup([784 100 10]);opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samples[nn, L] = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.08, 'Too big error');%% ex2 neural net with L2 weight decayrand('state',0)nn = nnsetup([784 100 10]);nn.weightPenaltyL2 = 1e-4; % L2 weight decayopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex3 neural net with dropoutrand('state',0)nn = nnsetup([784 100 10]);nn.dropoutFraction = 0.5; % Dropout fraction opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex4 neural net with sigmoid activation functionrand('state',0)nn = nnsetup([784 100 10]);nn.activation_function = 'sigm'; % Sigmoid activation functionnn.learningRate = 1; % Sigm require a lower learning rateopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex5 plotting functionalityrand('state',0)nn = nnsetup([784 20 10]);opts.numepochs = 5; % Number of full sweeps through datann.output = 'softmax'; % use softmax outputopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex6 neural net with sigmoid activation and plotting of validation and training error% split training data into training and validation datavx = train_x(1:10000,:);tx = train_x(10001:end,:);vy = train_y(1:10000,:);ty = train_y(10001:end,:);rand('state',0)nn = nnsetup([784 20 10]); nn.output = 'softmax'; % use softmax outputopts.numepochs = 5; % Number of full sweeps through dataopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, tx, ty, opts, vx, vy); % nntrain takes validation set as last two arguments (optionally)[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');```[![Bitdeli Badge](https://d2weczhvl823v0.cloudfront.net/rasmusbergpalm/deeplearntoolbox/trend.png)](https://bitdeli.com/free "Bitdeli Badge")

C# 对象深拷贝、浅铐贝、直接拷贝 【转】

原文:http://www.cnblogs.com/chjw8016/archive/2008/02/24/1078585.html C#中有两种类型变量,一种是值类型变量,一种是引用类型变量。对于前者,copy是属于全盘复制;而对于后者,一般的copy只是浅copy,相当于只传递一个引用指针一样。因此对于后者进行真正copy的时候,也是最费事的,具体的说,必须为其实现ICloneable接口...

weixin_30685047的博客 135

廖雪峰Python教程[完整版]

廖雪峰的python教程整理的,已经排好版了,而且还是完整的,适合小白

C# 对象深拷贝、浅铐贝、直接拷贝(转)

C#中有两种类型变量,一种是值类型变量,一种是引用类型变量。对于前者,copy是属于全盘复制;而对于后者,一般的copy只是浅copy,相当于只传递一个引用指针一样。因此对于后者进行真正copy的时候,也是最费事的,具体的说,必须为其实现ICloneable接口中提供的Clone方法。 浅拷贝(影子克隆):只复制对象的基本类型,对象类型,仍属于原来的引用. 深拷贝(深度克隆...

weixin_34405557的博客 118

数学建模模型总结

这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!

unity C#深拷贝、浅拷贝、直接赋值区别与经典实例

浅拷贝是指复制对象时,只复制对象本身所包含的值类型字段,并将引用类型字段简单地复制一份引用,而不是复制引用的对象内容。当一个对象被直接赋值给另一个变量时,实际上创建的是原对象的一个引用副本。浅拷贝同样是创建了一个新的对象,并且复制了原对象的所有非引用类型字段值和引用类型的引用。与直接赋值类似,浅拷贝后的引用类型成员仍然指向原来的引用类型的实例。深拷贝则不仅复制值类型字段,还复制引用类型字段所引用的对象,并为这些对象分配新的内存空间。这样一来,修改深拷贝后对象的引用类型字段不会影响到原对象。

qqrrjj2011的博客 3105

C# 中的浅拷贝和深拷贝

C#中的浅复制和深复制示例 在本文中,我将通过示例讨论C#中的浅拷贝和深拷贝。这是我们上一篇文章的续篇。因此,在继续本文之前,请阅读我们以前的文章,其中我们使用示例讨论了C#中的原型设计模式。 浅复制和深复制在复制原型设计模式中的对象中起着重要作用。因此,在本文中,我们将通过示例讨论什么是“浅复制”和“深复制”以及它们之间的区别。 了解C#中的浅表复制: 如果是“浅复制”,它将从现有对象创建新对象,然后将当前对象的值类型字段复制到新对象。但是在引用类型的情况下,它将仅复制引用,而不复制被引用对象本身

ananlele_的专栏 2429

C#对象深拷贝

C#对象深拷贝 众所周知,c#中的对象存在值类型和引用类型之分,故而对象之间的赋值就存在浅拷贝和深拷贝的概念 网上的深拷贝方法也很多,但是要么写的无比复杂,要么有诸多限制 最终还是选择了反射的方法,虽然都说反射效率太低,但是它毕竟最常见最通用的方法 public static T DeepCopy<T>(T obj) { ...

1715

c#深拷贝与浅拷贝

今天特意研究下了深拷贝和浅拷贝:首先介绍一下:C#中有两种类型变量,一种 是值类型变量,一种是引用类型变量。对于前者,copy是属于全盘复制;而对于后者,一般的copy只是浅copy,相当于只传递一个引用指针一样。因此 对于后者进行真正copy的时候,也是最费事的,具体的说,必须为其实现ICloneable接口中提供的Clone方法。浅拷贝(影子克隆):只复制对象的基本类型,对象类型,仍属于原来的

xiaolei1982致力于Web开发 1万+

C# 浅拷贝与深拷贝

拷贝(copy): 什么是拷贝:通常意义来说也就是复制,对象的拷贝也就是将对象复制出来一个一样的新对象出来。虽然都是复制对象,但是不同的复制方法,复制出来的对象确不是一样的,存在一些差异。 有哪些拷贝方法:分为浅拷贝与深拷贝 浅拷贝(shallow copy) 什么是浅拷贝: ...

hyyjiushiliangxing的博客 3644

C#中的浅拷贝和深拷贝

C#中的浅拷贝和深拷贝前言啥叫拷贝?浅拷贝深拷贝通过序列化实现深拷贝使用Json实现的深拷贝总结 前言 在之前的文章中,我们提及了C#中的值类型和引用类型,同时也简单提到了C#中的拷贝,今天让我们来深入看看这个话题。 &amp;nbsp; 啥叫拷贝? 拷贝又名复制,在计算机里面,拷贝的意思就是按照字节一一复制出一个全新的、和现有对象一模一样的对象,在C#中,拷贝又有浅拷贝和深拷贝的区别。 &amp;nbsp; 浅...

君子务本 1537

【C#语言】深拷贝与浅拷贝

在 C# 编程的世界里,深拷贝与浅拷贝是我们处理对象复制时的两把利刃。浅拷贝操作简单、效率较高,在处理大量对象且引用类型字段不会被修改的场景下,能够快速地创建对象副本,为程序节省时间和内存资源。然而,它的局限性也很明显,当涉及到引用类型字段的修改时,可能会导致数据不一致的问题。深拷贝则为我们提供了更彻底的对象复制方式,确保原始对象和副本对象在内存中完全独立,互不干扰。尽管实现深拷贝的方式多样,每种方式都有其独特的优缺点和适用场景,但在处理复杂对象结构和需要严格数据隔离的场景中,深拷贝是必不可少的。

远程部署调试 运行安装 项目调试 二次开发 项目技术新 持续迭代 部分源码免费分享 1349

C# 深拷贝和浅拷贝

C# 深拷贝和浅拷贝

明明明的博客 1484

C#中浅拷贝与深拷贝

参考资料:这里        浅拷贝是指当对象的字段值被拷贝时,字段引用的对象不会被拷贝。例如,如果一个对象有一个指向字符串的字段,并且我们对该对象做了一个浅拷贝,那么两个对象将引用同一个字符串。     深拷贝是对对象实例中字段引用的对象也进行拷贝的一种方式,所以如果一个对象有一个指向字符串的字段,并且我们对该对象做了一个深拷贝的话,我们将创建一个新的对象和一个新的字符串--新对象将引用新

___简言 1489
上一篇: session 和 cookie 的区别
下一篇: 深刻剖析经典面试题之一:堆和栈的区别
iamdll
博客等级 码龄19年 107粉丝 47原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值