我为C#伙计们提出一些可能过于基本的东西而道歉。我主要用C ++编写代码。
所以,如果我想为我的班级编写一个赋值构造函数,我该怎么做?到目前为止,我有这个,但它似乎没有编译:
public class MyClass
{
public string s1;
public string s2;
public int v1;
public MyClass()
{
s1 = "";
s2 = "";
v1 = 0;
}
public MyClass(MyClass s)
{
this = s; //Error on this line
}
}
MyClass a = new MyClass();
MyClass b = new MyClass(a);
答案 0 :(得分:8)
您无法分配类本身 - 该表单的构造函数通常会复制其他类的成员:
public MyClass(MyClass s)
{
this.s1 = s.s1;
this.s2 = s.s2;
this.v1 = s.v1;
}
它会根据您其他课程中的项目值给出“副本”。如果你想让参考共享,你不能这样做,但你不需要一个构造函数 - 分配变量可以正常工作:
var orig = new MyClass();
var referencedCopy = orig; // Just assign the reference
答案 1 :(得分:2)
使用Clone
可以实现您的目标public class MyClass : ICloneable
{
public string s1;
public string s2;
public int v1;
public MyClass()
{
s1 = "";
s2 = "";
v1 = 0;
}
public Object Clone()
{
return this.MemberwiseClone();
}
}
耗竭与:
MyClass a = new MyClass();
MyClass b = (MyClass)a.Clone();
答案 2 :(得分:1)
您无法在班级类型中指定this
。最好的方法可能是创建另一个构造函数并调用它:
public MyClass() : this(string.Empty, string.Empty, 0) { }
public MyClass(MyClass s) : this(s.s1, s.s2, s.v1) { }
private MyClass(string s1, string s2, int v1)
{
this.s1 = s1;
this.s2 = s2;
this.v1 = v1;
}
答案 3 :(得分:1)
这不是一个合理的解决方案吗?
public myClass() {
s1 = "";
s2 = "";
v1 = 0;
}
public myClass(String _s1, String _s2, Int _v1) {
s1 = _s1;
s2 = _s2;
v1 = _v1;
}
然后从你的代码
myClass a = new myClass();
myClass b = new myClass(a.s1,a.s2,a.v1);