当前位置: 首页 > news >正文

最专业网站建设哪家好中国搜索引擎排行榜

最专业网站建设哪家好,中国搜索引擎排行榜,php7.0 wordpress 设置,网站建设客户合同C# 深层副本与浅层副本 数据复制是编程中的重要任务。 对象是 OOP 中的复合数据类型。 对象中的成员字段可以按值或按引用存储。 可以以两种方式执行复制。 浅表副本将所有值和引用复制到新实例中。 引用所指向的数据不会被复制; 仅指针被复制。 新的引用指向原始…

C# 深层副本与浅层副本

数据复制是编程中的重要任务。 对象是 OOP 中的复合数据类型。 对象中的成员字段可以按值或按引用存储。 可以以两种方式执行复制。

浅表副本将所有值和引用复制到新实例中。 引用所指向的数据不会被复制; 仅指针被复制。 新的引用指向原始对象。 对引用成员的任何更改都会影响两个对象。

深层副本将所有值复制到新实例中。 如果成员存储为引用,则深层副本将对正在引用的数据执行深层副本。 创建一个引用对象的新副本。 并存储指向新创建对象的指针。 对这些引用对象的任何更改都不会影响该对象的其他副本。 深拷贝是完全复制的对象。

如果成员字段是值类型,则将对该字段进行逐位复制。 如果该字段是引用类型,则复制引用,但不是复制引用的对象。 因此,原始对象中的引用和克隆对象中的引用指向同一对象。 (来自 programmingcorner.blogspot.com 的明确解释)

C# 浅表复制

以下程序执行浅表复制。

Program.
using System;namespace ShallowCopy
{class Color{public int red;public int green;public int blue;public Color(int red, int green, int blue){this.red = red;this.green = green;this.blue = blue;}}class MyObject : ICloneable{public int id;public string size;public Color col;public MyObject(int id, string size, Color col){this.id = id;this.size = size;this.col = col;}public object Clone(){return new MyObject(this.id, this.size, this.col);}public override string ToString(){var s = String.Format("id: {0}, size: {1}, color:({2}, {3}, {4})",this.id, this.size, this.col.red, this.col.green, this.col.blue);return s;}}class Program{static void Main(string[] args){var col = new Color(23, 42, 223);var obj1 = new MyObject(23, "small", col);var obj2 = (MyObject) obj1.Clone();obj2.id += 1;obj2.size = "big";obj2.col.red = 255;Console.WriteLine(obj1);Console.WriteLine(obj2);}}
}

这是一个浅表副本的示例。 我们定义了两个自定义对象:MyObjectColor。 MyObject对象将引用 Color 对象。

class MyObject : ICloneable

我们应该为要克隆的对象实现ICloneable接口。

public object Clone()
{return new MyObject(this.id, this.size, this.col);
}

ICloneable接口迫使我们创建Clone()方法。 此方法返回具有复制值的新对象。

var col = new Color(23, 42, 223);  

我们创建 Color 对象的实例。

var obj1 = new MyObject(23, "small", col);

创建MyObject类的实例。 Color对象的实例传递给构造函数。

var obj2 = (MyObject) obj1.Clone();

我们创建 obj1 对象的浅表副本,并将其分配给 obj2 变量。 Clone()方法返回Object,我们期望MyObject。 这就是我们进行显式转换的原因。

obj2.id += 1;
obj2.size = "big";         
obj2.col.red = 255;

在这里,我们修改复制对象的成员字段。 我们增加 id,将大小更改为“大”,然后更改颜色对象的红色部分。

Console.WriteLine(obj1);
Console.WriteLine(obj2);

Console.WriteLine()方法调用obj2对象的ToString()方法,该方法返回对象的字符串表示形式。

$ dotnet run
id: 23, size: small, color:(255, 42, 223)
id: 24, size: big, color:(255, 42, 223)

我们可以看到 ID 是不同的(23 对 24)。 大小不同(“小”与“大”)。 但是,这两个实例的颜色对象的红色部分相同(255)。 更改克隆对象的成员值(id,大小)不会影响原始对象。 更改引用对象(col)的成员也影响了原始对象。 换句话说,两个对象都引用内存中的同一颜色对象。

C# 深层复制

要更改此行为,我们接下来将做一个深层复制。

Program.
using System;namespace DeepCopy
{class Color : ICloneable{public int red;public int green;public int blue;public Color(int red, int green, int blue){this.red = red;this.green = green;this.blue = blue;}public object Clone(){return new Color(this.red, this.green, this.blue);}}class MyObject : ICloneable{public int id;public string size;public Color col;public MyObject(int id, string size, Color col){this.id = id;this.size = size;this.col = col;}public object Clone(){return new MyObject(this.id, this.size,(Color)this.col.Clone());}public override string ToString(){var s = String.Format("id: {0}, size: {1}, color:({2}, {3}, {4})",this.id, this.size, this.col.red, this.col.green, this.col.blue);return s;}}class Program{static void Main(string[] args){var col = new Color(23, 42, 223);var obj1 = new MyObject(23, "small", col);var obj2 = (MyObject) obj1.Clone();obj2.id += 1;obj2.size = "big";obj2.col.red = 255;Console.WriteLine(obj1);Console.WriteLine(obj2);}}
}

在此程序中,我们对对象执行深层复制。

class Color : ICloneable

现在,Color 类实现了ICloneable接口。

public object Clone()
{return new Color(this.red, this.green, this.blue);
}

我们也为Color类提供了Clone()方法。 这有助于创建引用对象的副本。

public object Clone()
{return new MyObject(this.id, this.size, (Color) this.col.Clone());
}

当我们克隆MyObject时,我们根据 col 引用类型调用Clone()方法。 这样,我们也可以获得颜色值的副本。

$ dotnet run
id: 23, size: small, color:(23, 42, 223)
id: 24, size: big, color:(255, 42, 223)

现在,所引用的 Color 对象的红色部分不再相同。 原始对象保留了其先前的值(23)。

http://www.khdw.cn/news/21407.html

相关文章:

  • 淮安哪里有做网站的人无锡网站seo顾问
  • 局域网网站域名怎么做今日最新闻
  • 漳州 做网站百度招聘官网首页
  • 查域名被墙沈阳seo按天计费
  • 做网站有er图seoshanghai net
  • 网页设计网站模板素材在哪里推广比较好
  • 永久免费网站百度下载并安装
  • 珠海网站建设有限公司网络营销就业前景和薪水
  • 外汇跟单社区网站开发中小企业网站
  • 做网站找什么公司好合肥优化
  • 新安商品混泥土网站建设今日热搜排行第一名
  • 树木挂牌图片自制关键词优化公司排名榜
  • 邢台网站建设哪里有aso优化什么意思
  • 定制网站建设济南百度推广怎么做免费
  • 用asp做网站流程google引擎入口
  • 怎么学做网站网络营销岗位职责和任职要求
  • 滨海专业做网站的公司成都品牌推广
  • 宇锋网站建设seo案例分析100例
  • 建站之星网站模板google推广公司
  • 定制网站开发报价东莞日增感染人数超25万
  • 中国最好的建站公司优化关键词有哪些方法
  • 北京网站建设方案托管重庆森林电影
  • 网络建设与运维技能大赛seo综合查询怎么用的
  • 手机做的兼职网站设计网站建设模板
  • 网站焦点图怎么做百度排名优化专家
  • 郑州商城网站开发网页设计与网站建设教程
  • b2b平台包括哪些嘉兴seo计费管理
  • 门户网站建设周期seo技术蜘蛛屯
  • 有哪些可以做威客的网站网络运营商
  • 东莞做营销型网站云搜索系统