我想在类中调用构造函数,如: 公共类Myclass(){
public MyClass(){
//......
}
public MyClass(int id):this(){
//......
}
private void Reset(){
//.....
this = new MyClass(id); //here I want to call constructor
//......
}
}
但它不起作用。是否有可能,如果可以,我该怎么做?
答案 0 :(得分:15)
简单回答:你不能。
答案稍微复杂一点:将初始化逻辑移动到可以从构造函数和Reset()
方法调用的单独方法中:
public class MyClass
{
public int? Id { get; }
public MyClass()
{
Initialize();
}
public MyClass(int id)
{
Initialize(id);
}
public Reset()
{
Initialize();
}
private Initialize(int? id = null)
{
// initialize values here instead of the constructor
Id = id;
}
}
答案 1 :(得分:12)
你做不到。但你可以做的是将构造函数逻辑拆分为Initialize方法,然后重置可以调用。
public MyClass(){
//......
}
public MyClass(int id):this(){
Initialize(id);
}
private void Initialize(int id){
//....
}
private void Reset(){
//.....
Initialize(id);
//......
}
}
答案 2 :(得分:3)
不,这是不可能的。你无法分配给它。
然而,您可以让Reset()
返回MyClass
的新实例,以便来电者代码可以说:
public class MyClass
{
public MyClass Reset()
{
return new MyClass();
}
}
MyClass c = new MyClass();
c = c.Reset();
或者您可以实现Reset
方法,以便将所有字段重新初始化为默认值。
答案 3 :(得分:2)
你可以在你的类中调用你的类的构造函数(实际上这通常用工厂方法完成):
public class MyClass
{
public static MyClass Create()
{
return new MyClass();
}
}
但是你不能改变类中this
引用的值。您应该使用“Reset()”方法将字段设置回默认值。
答案 4 :(得分:1)
在课堂上你不能重新分配this
(虽然值得注意的是在一个结构中它是完全合法的)。但问题是,是否。我假设您的目标是将所有字段值设置为特定状态,因此其他人已经说过您可以让您的Reset方法返回一个新实例,或者您可以将您的逻辑分解为Clear()方法并调用该方法代替。