接受同一类参数的C#构造函数
我有一个自定义类接受同一类参数的C#构造函数,c#,class,constructor,C#,Class,Constructor,我有一个自定义类 class MyClassA{ public int Width { get; set; } } 还有另一个定制的B级 class MyClassB { public MyClassA paramClassA; public int Height { get; set; } } 有没有办法在MyClassB中有一个构造函数,它接受MyClassB类型的参数并自动为属性赋值 大概是这样的: class MyClassB{ public MyC
class MyClassA{
public int Width { get; set; }
}
还有另一个定制的B级
class MyClassB {
public MyClassA paramClassA;
public int Height { get; set; }
}
有没有办法在MyClassB中有一个构造函数,它接受MyClassB类型的参数并自动为属性赋值
大概是这样的:
class MyClassB{
public MyClassA paramClassA;
public int Height { get; set; }
public MyClassB(MyClassB param){
}
public MyClassB(MyClassB param){
// automatically assign properties of param to the instance it is created
}
}
所以我可以这样做:
var classB = new MyClassB();
classB.Height = 100;
classB.paramClassA = new MyClassA();
classB.paramClassA.Width = 100;
var classB2 = new MyClassB(classB);
有什么方法可以做到这一点吗?没有内置的方法可以做到这一点。无论如何,这是复制构造函数的目的,可以通过将现有实例中的所有属性复制到当前实例来实现。然而,当您拥有一个深层继承链时,复制所有这些成员可能是一项非常重要的任务,其中也包括私有成员
class MyClassB{
public MyClassA paramClassA;
public int Height { get; set; }
public MyClassB(MyClassB param){
this.Heigth = param.Height;
this.MyClassA = param.MyClassA;
}
}
您还可以实现ICloneable
:
class MyClassB : ICloneable {
public MyClassA paramClassA;
public int Height { get; set; }
public object Clone(){
return new MyClassB
{
this.Height;
this.MyClassA;
};
}
}
是的,你可以手工做。记住: 我将推荐MyClassB类中的
Clone
方法:
class MyClassB{
//....
public MyCLassB Clone()
{
var result = new MyClassB
{
Height = Height
};
result.paramClassA = new MyClassA();
if (paramClassA != null)
{
result.paramClassA.Width = paramClassA.Width;
}
}
}
并使用它,如下所示:
var classB = new MyClassB();
classB.Height = 100;
classB.paramClassA = new MyClassA();
classB.paramClassA.Width = 100;
var classB2 = classB.Clone();
您总是可以创建一个copy方法来分配值,并返回一个MyClassB,在其中分配值。如果必须在构造函数中执行此操作,请检查以下内容
public MyClassB(MyClassB param)
{
Width = param.Width;
// If you want to keep the same reference classA
paramClassA = param.paramClassA;
// if you want the classA to not be the same reference you could always do.
paramClassA = new MyClassA() { Width = param.Width };
}
想做就做在构造函数内部
this.paramClassA=param.paramClassA;此高度=参数高度代码>或您从iClonable继承
public MyClassB(MyClassB param)
{
Width = param.Width;
// If you want to keep the same reference classA
paramClassA = param.paramClassA;
// if you want the classA to not be the same reference you could always do.
paramClassA = new MyClassA() { Width = param.Width };
}