我已经在搜索引擎优化和其他网站上搜索过这个问题,但我没有设法找到(或找到)我的案例的解决方案。
我有一个名为EnteBase
的抽象类,我将其用作其他两个类Regione
和Provincia
的基础( duh!)。< / p>
EnteBase
:
public abstract class EnteBase
{
public EnteBase ()
: this( "Sconosciuto", 0 )
{
}
public EnteBase ( string nome )
: this( nome, 0 )
{
}
public EnteBase ( string nome, int numeroComuni )
{
this.Nome = nome;
this.NumeroComuni = numeroComuni;
}
private string nome;
public string Nome
{
[...]
}
private int numeroComuni;
public int NumeroComuni
{
[...]
}
}
Regione
:
public class Regione : EnteBase
{
public List<Provincia> Province
{
[...]
}
public Regione ()
: base()
{
this.Province = new List<Provincia>();
}
public Regione ( string nome )
: this()
{
}
public Regione ( string nome, int numeroComuni )
: this()
{
}
public void AggiungiProvincia ( Provincia provincia )
{
Province.Add( provincia );
}
}
Provincia
:
public class Provincia : EnteBase
{
private string sigla;
public string Sigla
{
[...]
}
public Provincia ()
: base()
{
}
public Provincia ( string nome )
: this()
{
this.Nome = nome;
}
public Provincia ( string nome, int numeroComuni )
: this()
{
this.Nome = nome;
this.NumeroComuni = numeroComuni;
}
public Provincia( string nome, int numeroComuni, string sigla)
: this()
{
this.Nome = nome;
this.NumeroComuni = numeroComuni;
this.Sigla = sigla;
}
}
我的问题如下:
:this()
是正确的,除了参数最多的构造函数,其他构造函数指向后者吗?:this()
指向类Provincia
和Regione
中的基础构造函数,然后从方法本身内部分配字段是否正确?我的问题源于我想在每种方法中同时使用:this()
和:base()
这一事实。当我发现无法找到解决方案时,我无法找到一种方法来应用我在this question和this one中看到的内容。
P.S。:,是首选使用this.FieldName
还是只使用FieldName
?
答案 0 :(得分:3)
在基类的所有构造函数中使用:this()是否正确 除了参数最多的那个,其他参数指向 后者?
唯一的用例是构造函数链接,其中您将初始化工作最小化到一个构造函数,并让所有其他构造函数使用带有导致该构造函数执行的参数的this()
- 您已经在{{1 }。class。
空EnteBase
调用通常是无用的,因为默认情况下默认调用默认的基础构造函数。
空base()
调用方式错误,通常也没用(除非你有一些不依赖于参数的初始化工作) - 你应该传递参数,调用更多参数的构造函数,最终结束完成所有工作的一个构造函数。
答案 1 :(得分:1)
使用是否正确:this()指向Provincia和Regione类中的基础构造函数,然后从方法本身内部分配字段?
在C#中,对:base()
的调用是隐式的,因此无需明确地进行。
因此,在您的示例中,您不需要调用:this()
,因为所有这些都是调用基本无参数构造函数。
在基类的所有构造函数中使用:this()是正确的,除了具有大多数参数的构造函数,其他构造函数指向后者吗?
这是给出值合理默认值的常用方法,是的。
答案 2 :(得分:1)
您应该更改Constructor
中的以下subclass
:
public Provincia ( string nome, int numeroComuni )
: this()
{
this.Nome = nome;
this.NumeroComuni = numeroComuni;
}
要强>
public Provincia ( string nome, int numeroComuni )
: base(nome, numeroComuni)
{
}
AND 以下Constructor
中的相同内容,来自:
public Provincia( string nome, int numeroComuni, string sigla)
: this()
{
this.Nome = nome;
this.NumeroComuni = numeroComuni;
this.Sigla = sigla;
}
要强>
public Provincia( string nome, int numeroComuni, string sigla)
: base(nome, numeroComuni)
{
this.Sigla = sigla;
}
无需按照superclass
es实施的目的设置subclass
中superclass
的属性。