提问人:Syed Rafay Hassni 提问时间:11/2/2022 更新时间:11/2/2022 访问量:161
C# 中构造函数的深层复制 [已关闭]
Deep Copy of Constructor in C# [closed]
问:
由于我是 C# 的初学者,并且想掌握 oop 的这些概念,因此非常感谢您解释此概念的宝贵答案
答:
1赞
Sabre
11/2/2022
#1
我们需要查看二次类的 ctor,似乎您缺少一个接受一个参数的重载。
这样。
namespace ConsoleApp1
{
internal class Class1
{
public Class1()
{
}
public Class1(int input)
{
}
}
}
0赞
cemahseri
11/2/2022
#2
我假设您的 Quadratic 类没有自己的类型用于创建深层复制的重载。创建类的深层副本的选项很少。
- 通过在构造函数中自行设置类的属性来创建类
- 使用 MemberwiseClone() 方法。
- 序列化它,然后再次反序列化它。可以使用位于 System.Text.Json 命名空间中的内置 JSON 序列化程序或 Protobuf 执行此操作。(不要使用 BinaryFormatter 来执行此操作。有关详细信息,请查看此文章。
public class Quadratic
{
public int A { get; set; }
public int B { get; set; }
public int C { get; set; }
public Quadratic()
{
}
public Quadratic(Quadratic quadraticToCopy)
{
A = quadraticToCopy.A;
B = quadraticToCopy.B;
C = quadraticToCopy.C;
}
public Quadratic CreateDeepCopy1() => new Quadratic(this);
public Quadratic CreateDeepCopy2() => (Quadratic)this.MemberwiseClone();
}
然后你可以这样使用它;
var originalQuadratic = new Quadratic();
originalQuadratic.Input();
originalQuadratic.Display();
var deepCopiedQuadratic1 = originalQuadratic.CreateDeepCopy1();
var deepCopiedQuadratic2 = originalQuadratic.CreateDeepCopy2();
评论
Quadratic
struct
class
Quadratic copy = original;