`
shirlly
  • 浏览: 1652755 次
  • 性别: Icon_minigender_2
  • 来自: 福州
社区版块
存档分类
最新评论

C# Clone() 方法

    博客分类:
  • .NET
阅读更多
class DrawBase:System.Object , ICloneable
    {
        public string name = "jmj";
        public DrawBase()
        {
        } 
        
        public object Clone()
        {
            return this as object;      //引用同一个对象
            return this.MemberwiseClone(); //浅复制
            return new DrawBase() as object;//深复制
        }
    }
class Program
{
 
        static void Main(string[] args)
        {
            DrawBase rect = new DrawBase();
            Console.WriteLine(rect.name);
            DrawBase line = rect.Clone() as DrawBase;
            line.name = "a9fs3";
            Console.WriteLine(rect.name);
            DrawBase ploy = line.Clone() as DrawBase;
            ploy.name = "lj";
            Console.WriteLine(rect.name);
 
            Console.WriteLine(object.ReferenceEquals(line, ploy));
            Console.ReadLine();
        }
}
 


运行结果:
return this as object;      //引用同一个对象
输出:jmj
        a9fs3
        lj
        True

return this.MemberwiseClone(); //浅复制
return new DrawBase() as object;//深复制
输出均为: jmj
             jmj
             jmj
             False
解释:
return this as object 方法总是引用同一个对象,因此相应的堆内存上的值会改变!
后两种方法都是对对象的复制,区别在于复制的类别不同:深复制会复制整个填充的对象,包括该对象中其他引用类型和值类型的值;而浅复制只复制了一个对象中所有引用,它没有值的复制,通过引用它们的其他对象的引用来共享它们。


本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/ifooler/archive/2007/05/06/1598452.aspx
分享到:
评论

相关推荐

    C#中Clone一个对象的值到另一个对象案例 c#经典案例.pdf

    在这篇文章中,我们将学习如何使用 C# 中的 Clone 方法来复制一个对象的值到另一个对象。 什么是 Clone? Clone 是一种复制对象的方法,它可以将一个对象的值复制到另一个对象中。 Clone 方法可以分为浅复制和深...

    C#浅拷贝(MemberwiseClone等多种方法)与深拷贝(反射、多种反序列化)实例

    本文将深入探讨这两种拷贝方式以及它们在C#中的实现方法,特别是如何使用`MemberwiseClone`、反射以及反序列化技术。 首先,浅拷贝是通过`Object.MemberwiseClone()`方法来实现的。这个方法为对象创建一个新的实例...

    C# Bitmap 切图工具

    3. **裁剪功能**:`Bitmap`类提供了`Clone`方法,可以用于创建原始图像的子区域副本。通过指定裁剪的矩形区域(起点和大小),我们可以创建新的Bitmap对象,这就是裁剪后的图像。 4. **进度条显示**:在裁剪大量...

    C# list对象FindAll函数的四种写法

    在C#编程中,`List<T>` 是一个非常常用的集合类,它提供了丰富的操作方法,如查找、添加、删除等。在本篇文章中,我们将详细探讨`List<T>`的`FindAll`方法,并通过四种不同的写法来演示如何使用这个功能来筛选满足...

    C#基础应用实例

    例如,`ICloneable`接口定义了`Clone`方法,任何实现该接口的类都必须提供`Clone`方法的具体实现。 接下来,我们讨论**委托(Delegate)**。委托是C#中的类型安全事件处理程序,可以视为指向方法的指针。它们允许...

    ImageProcessor: C#的图像处理程序

    3. **图像裁剪与缩放**:Bitmap类的Clone方法可以实现裁剪,SetResolution和Clone方法结合可以实现图像的缩放。 4. **颜色操作**:如调整亮度、对比度,可以通过访问像素的Color属性,并修改ARGB值实现。 5. **滤镜...

    .NET中C#图片切割与保存

    在这个代码示例中,我们首先计算出每一块图片的宽度和高度,然后通过两个嵌套的循环遍历所有子图,使用Rectangle结构体定义切割区域,并通过Clone方法创建新的Bitmap对象。最后,使用Save方法将子图保存到指定路径。...

    C# 开发 websocket 服务端和客户端

    在C#中开发WebSocket服务端和客户端,可以实现双向通信,即服务器和客户端都能主动发送数据,这对于实时性要求高的应用,如在线聊天、游戏、股票交易等场景非常适用。 WebSocketSharp是C#中的一个开源库,它为C#...

    C#生成缩略图,C#缩略图,C#水印

    首先,定义一个新尺寸的矩形,然后调用源图片的Clone方法,传入新的尺寸和图像格式,即可得到缩略图。 - `Graphics`类的`DrawImage`方法也可用于创建缩略图,通过指定目标尺寸,它可以按比例缩放图像。 3. **调整...

    C# List引用类型克隆的3种方法

    本文将探讨三种克隆C# List引用类型的方法:反射、JSON序列化(依赖于Newtonsoft.Json库)以及BinaryFormatter序列化。 首先,让我们深入理解C#中的浅复制和深复制概念。默认情况下,当复制一个引用类型的变量时,...

    MSN Messenger Clone

    C# 2.0版本引入了许多改进和新特性,例如匿名方法、迭代器、属性改进以及对泛型的支持,这些都为开发高效且易于维护的代码提供了便利。 .NET框架是微软开发的一个全面的开发平台,它包含了执行环境(Common ...

    C#高仿QQ截图

    - 剪裁图像:根据用户选择的区域,使用`Bitmap.Clone()`方法剪裁出相应部分。 - 编辑功能:可以添加标注、马赛克、箭头等元素,这些需要使用`Graphics`类的绘图方法实现。 - 保存和复制到剪贴板:使用`Bitmap....

    C#图片局部放大

    Clone方法需要两个参数:一个Rectangle结构体表示要复制的区域,另一个是PixelFormat枚举值表示目标图像的像素格式。例如,我们要获取图片左上角100x100像素的区域: ```csharp Rectangle rect = new Rectangle(0,...

    用c#实现的图片裁剪并保存

    这里我们选择缩放,可以使用Bitmap对象的Clone方法,配合Image.GetThumbnailSize方法来计算保持比例的缩放尺寸: ```csharp var newWidth = Math.Min(originalImage.Width, targetWidth); var newHeight = Math.Min...

    c#图片管理工具模块

    C#可以通过Bitmap的Clone方法创建原始图像的副本,然后在副本上应用各种算法实现这些效果。例如,可以使用ConvolutionMatrix进行像素级别的操作,实现模糊或锐化效果;通过调整颜色通道的值,可以改变图像的饱和度、...

    c#.net Bitmap类的基本使用方法

    - `Clone()`:创建位图的一个副本。 - `LockBits(Rectangle rect, ImageLockMode flags, PixelFormat format, IntPtr& bitmapData)`:锁定位图的部分区域进行低级像素操作。 - `UnlockBits(BitmapData bitmapData...

    C#实现图像处理软件

    2. 基本操作:缩放、旋转、裁剪、调整亮度/对比度等,通过Bitmap对象的Clone方法创建副本并应用变换。 3. 调整颜色模式:从RGB转换到灰度,或者其他颜色空间,如HSV或CMYK。 4. 图像滤波:使用滤波算法(如高斯模糊...

    C# 拷贝数组的几种方式.

    CopyTo() 和 Clone() 两个方法的区别在于,CopyTo() 方法创建了一个新 Array 对象,而 Clone() 方法只是复制了 Array 引用。这两个方法都属于浅拷贝的方式,但是它们的实现方式不同。CopyTo() 方法需要手动指定目标...

    C#图片剪裁代码(已修改)

    然后,我们可以通过`Bitmap.Clone()`方法来复制原图像的一个子区域,实现剪裁效果。以下是一个简单的图片剪裁代码示例: ```csharp using System.Drawing; // 加载原始图像 Bitmap originalImage = Bitmap.From...

    C#Map映射各个方式性能大比拼

    实现该接口并重写`Clone()`方法,可以选择执行浅复制或深复制。 4. **`System.Collections.Generic.Dictionary, TValue>`映射** - 当需要将一个对象映射到另一个具有相似结构的对象时,可以使用`Dictionary`类。将...

Global site tag (gtag.js) - Google Analytics