惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

Simon Willison's Weblog
Simon Willison's Weblog
Google DeepMind News
Google DeepMind News
CTFtime.org: upcoming CTF events
CTFtime.org: upcoming CTF events
P
Proofpoint News Feed
Recent Announcements
Recent Announcements
MongoDB | Blog
MongoDB | Blog
U
Unit 42
云风的 BLOG
云风的 BLOG
Recorded Future
Recorded Future
G
Google Developers Blog
I
InfoQ
Blog — PlanetScale
Blog — PlanetScale
A
About on SuperTechFans
Jina AI
Jina AI
量子位
宝玉的分享
宝玉的分享
The Cloudflare Blog
让小产品的独立变现更简单 - ezindie.com
让小产品的独立变现更简单 - ezindie.com
博客园 - 聂微东
Last Week in AI
Last Week in AI
WordPress大学
WordPress大学
美团技术团队
The Hacker News
The Hacker News
Threat Intelligence Blog | Flashpoint
Threat Intelligence Blog | Flashpoint
D
Darknet – Hacking Tools, Hacker News & Cyber Security
T
Tailwind CSS Blog
博客园 - 司徒正美
博客园 - 叶小钗
Hugging Face - Blog
Hugging Face - Blog
P
Palo Alto Networks Blog
博客园_首页
阮一峰的网络日志
阮一峰的网络日志
博客园 - 【当耐特】
Spread Privacy
Spread Privacy
The GitHub Blog
The GitHub Blog
Y
Y Combinator Blog
Vercel News
Vercel News
Martin Fowler
Martin Fowler
cs.CL updates on arXiv.org
cs.CL updates on arXiv.org
Forbes - Security
Forbes - Security
Attack and Defense Labs
Attack and Defense Labs
Google DeepMind News
Google DeepMind News
Cyber Security Advisories - MS-ISAC
Cyber Security Advisories - MS-ISAC
Microsoft Azure Blog
Microsoft Azure Blog
P
Privacy International News Feed
G
GRAHAM CLULEY
The Last Watchdog
The Last Watchdog
C
Cyber Attacks, Cyber Crime and Cyber Security
AI
AI
V2EX - 技术
V2EX - 技术

博客园 - 一碗豆芽汤(OneV)

2021年立个Flag,回顾十多年来的IT职业之路-----没事瞎BB 使用 Visual Studio 创建 .NET 5 控制台应用程序 log4net将日志进行分类,保存到不同的目录当中 .net 使用PowerShell获取电脑中的UUID .Net MVC中访问PC网页时,自动切换到移动端对应页面 C# 全角符号转半角 微信开发第二篇:工具篇 微信开发第一篇:问题篇 [转载]ODAC (odp.net) 开发到部署 【项目开发】LigerUI+MVC的应用 VS中两个常用辅助工具 sqlite中常见的问题总结 第1次做面试官的随谈(二) 第1次做面试官的随谈(一) 转,有用 [转载收录]ASP.NET 2.0加密Web.config - 一碗豆芽汤(OneV) - 博客园 关于重构之Switch的处理【二】 - 一碗豆芽汤(OneV) - 博客园 重构的例子 关于重构之Switch的处理【一】如果是有序的话,如何处理
C#一些基础知识回顾
一碗豆芽汤(OneV) · 2021-02-24 · via 博客园 - 一碗豆芽汤(OneV)

2021年开春,事业部开启了新一轮招聘;总的来就一个字感觉“难”,两个字“很难”,招不到的原因很多。

不过在面试的过程中,发现很多人C#基础知识都不掌握。其中存在大量工作好几年的人。

所以,借此把一些基础知识做个回顾:

1、关于引用类型的问题

//定义类Person,其中有属性Name

class Person { public string Name { get; set; } } static void Main(string[] args) {
//定义变量a,并赋值实例化Person Person a = new Person(); a.Name = "张三";
//定义变量b,直接赋值b=a Person b = a;
//赋值b.Name b.Name = "李四"; Console.WriteLine($"a.name={a.Name}"); Console.ReadLine(); }

请问,现在a.Name值等于多少,b.Name等于多少?

 答案肯定是是:李四。

看起来很简单,却有很多人回答错误。

原因如下:

首先对于class类来讲,肯定属于引用类型,对于引用类型。那么b=a的赋值来说,所引用的内存地址完全为同一个,所以当b改变时,a也会随之改变。

那么,如何实现改变b属性的值不影响a的值呢?这里就必须实现类对象的深拷贝,或者独立引用。

  •   调用要复制的对象的类构造函数,以创建具有从第一个对象获取的属性值的第二个对象。 这假设对象的值由其类构造函数完全定义。
  • 调用 MemberwiseClone 方法以创建对象的浅表副本,然后将新对象的值与原始对象的值相同,分配给任何属性或其值为引用类型的字段。
  • 序列化要深层复制的对象,然后将序列化的数据还原到其他对象变量。(这种应该个人觉得是最简单的方式之一
  • 使用带有递归的反射来执行深层复制操作。