我如何正确使用:base()和:this()?

时间:2012-02-04 23:23:42

标签: c# constructor this grouping base

我已经在搜索引擎优化和其他网站上搜索过这个问题,但我没有设法找到(或找到)我的案例的解决方案。

我有一个名为EnteBase的抽象类,我将其用作其他两个类RegioneProvincia的基础( 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()指向类ProvinciaRegione中的基础构造函数,然后从方法本身内部分配字段是否正确?

我的问题源于我想在每种方法中同时使用:this():base()这一事实。当我发现无法找到解决方案时,我无法找到一种方法来应用我在this questionthis one中看到的内容。

在构造函数中

P.S。:,是首选使用this.FieldName还是只使用FieldName

3 个答案:

答案 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实施的目的设置subclasssuperclass的属性。