zoukankan      html  css  js  c++  java
  • C#一些基础知识回顾

    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 方法以创建对象的浅表副本,然后将新对象的值与原始对象的值相同,分配给任何属性或其值为引用类型的字段。
    • 序列化要深层复制的对象,然后将序列化的数据还原到其他对象变量。(这种应该个人觉得是最简单的方式之一
    • 使用带有递归的反射来执行深层复制操作。
  • 相关阅读:
    系统架构师学习笔记_第十三章(上)_连载
    PHP开发不能违背的安全规则
    五种常见的PHP设计模式
    系统架构师学习笔记_第十四章_连载
    Agile PLM Setting Up EC Attributes and Attribute Mapping
    Agile PLM EC Client Product Structure
    Agile EC 301 SolidWorks Connector Administration
    Agile PLM Create Item /BOM Dialog
    Agile PLM 权限控制
    Agile PLM EC Understand the BOM Publishing Process
  • 原文地址:https://www.cnblogs.com/wangyong969/p/14443941.html
Copyright © 2011-2022 走看看