构造函数'<name>'不能调用自己



我正在尝试使此类称为" partoto'",该课程翻译成医生,但在"此"中,出现错误

constructor'Medico.Medico(字符串,字符串,int,String,String(无法调用自己。

我想在列表视图中添加医生课以添加数据。

public class Medico
{
    public string Nome { get; set; }
    public string Especialidade { get; set; }
    private int _NIF;
    private DateTime _inicio;
    private DateTime _fim;
    public int NIF
    {
        get { return _NIF; }
        set
        {
            _NIF = value;
            if (_NIF < 99999999)
            {
                _NIF = 0;
            }
        }
    }
    public DateTime Inicio
    {
        get { return _inicio; }
        set
        {
            _inicio = value;
        }
    }
    public DateTime Fim
    {
        get { return _fim; }
        set
        {
            _fim = value;
        }
    }

    public Medico(string nome, string especialidade, int _NIF, DateTime _inicio, DateTime _fim)
    {
        Nome = nome;
        Especialidade = especialidade;
        NIF = _NIF;
        Inicio = _inicio;
        Fim = _fim;
    }
    public Medico(string nome, string especialidade, int _NIF, string _inicio, string _fim)
        : this(nome, especialidade, _NIF, _inicio, _fim) {            
    }
    public override string ToString()
    {
        return Inicio.ToString() + Fim.ToString();
    }
}  

以下构造函数定义:

public Medico(string nome, string especialidade, int _NIF, string _inicio, string _fim)
        : this(nome, especialidade, _NIF, _inicio, _fim) 

意味着调用此类的另一个构造函数并传递this(...)中的值。由于您只需通过_inicio_fim的字符串,因此构造函数试图自称。我建议您想致电另一个构造函数:

public Medico(string nome, string especialidade, int _NIF, DateTime _inicio, DateTime _fim)

要进行taht,您需要首先将字符串转换为数据记录。也许这样的东西:

public Medico(string nome, string especialidade, int _NIF, string _inicio, string _fim)
            : this(nome, especialidade, _NIF, DateTime.ParseExact(_inicio, 'yyyyMMdd',CultureInfo.InvariantCulture) , DateTime.ParseExact(_fim,'yyyyMMdd',CultureInfo.InvariantCulture)) 

只需更改模式

在您的第二个构造函数中,您只是传递了您获得的参数。

this(nome, especialidade, _NIF, _inicio, _fim)

取而代之的是将_inicio_fim施加到DateTime,并将其称为第一个构造函数。

  • 请参阅将字符串转换为DateTime

    this(nome, especialidade, _NIF, DateTime.ParseExact(_inicio,"YourFormat"), 
         DateTime.ParseExact(_fim,"YourFormat"))
    
  • 如果您知道格式是正确的DateTime格式,则可以使用DateTime.Parse()

通常,您可能想更改和使用对象界限器,而不是拥有许多构造函数。有关何时使用的更多信息,请参见:

  • 我应该使用对象初始器或构造函数吗?
  • 对象初始器和构造函数有什么区别?

除了使用默认实现的属性外,还可以更好地使用自动企业:

public DateTime Fim { get; set; }
public DateTime Inicio { get; set; }

如果要为Medico创建具有不同输入参数的几个构造函数,只需创建一个新的Medico构造函数,而无需this

public Medico(string nome, string especialidade, int _NIF, DateTime _inicio, DateTime _fim)
{
    Nome = nome;
    Especialidade = especialidade;
    NIF = _NIF;
    Inicio = _inicio;
    Fim = _fim;
}
public Medico(string nome, string especialidade, int _NIF, string _inicio, string _fim)
{
    // here convert _inicio and _fim to DateTime
    // And call the first constructor method with new parameters
    Medico(nome, especialidade, _NIF, inicioDateTime, fimDateTime);
}

最新更新