构造函数&#39; <name>&#39;不能自称

时间:2017-06-01 08:46:01

标签: c# class

我试图让这个名为“Medico&#39;转化为博士,但在&#34;这&#34;它出现错误

  

构造函数&#39; Medico.Medico(字符串,字符串,整数,字符串,字符串)无法调用自身。

我想让一个医生类将数据添加到列表视图中。

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();
    }
}  

3 个答案:

答案 0 :(得分:0)

在你的第二个构造函数中,你只是传递你得到的参数..所以它自己调用。

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

而是将_inicio_fim投射到DateTime,然后调用第一个构造函数。

  • 请参阅Converting a String to a 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; }

答案 1 :(得分:0)

如果要为具有不同输入参数的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);
}

答案 2 :(得分:0)

以下构造函数定义:

refreshPane: function (paneName, args, callback, callOnReload) {
    var paneId;
    if (!paneName) {
        paneId = this.getModuleManager().getPane().attr('id');
    } else {
        paneId = this.getPaneById(paneName).attr('id');
    }

    var pane = $('#' + paneId);
    var parentPane = pane.data('parentpane');
    if (parentPane) {
        this.refreshPane(parentPane, args, callback);
        return;
    }
    //set module manager to current refresh pane.
    this._moduleManager = pane.data('dnnModuleManager');
    var ajaxPanel = $find(paneId + "_SyncPanel");
    if (ajaxPanel) {
        //remove action menus from DOM bbefore fresh pane.
        var handler = this;
        pane.find('div.DnnModule').each(function () {
            var moduleId = handler._moduleManager._findModuleId($(this));
            $('#moduleActions-' + moduleId).remove();
        });

        Sys.WebForms.PageRequestManager.getInstance().add_endRequest(this._refreshCompleteHandler);
        this._refreshPaneId = paneId;
        this._refreshCallback = callback;
        ajaxPanel.ajaxRequest(args);
    } else {
        //save the args into cookie, after page reload then catch the cookie
        //and float the module for drag
        if (args && !this._noFloat) {
            this._setCookie('CEM_CallbackData', args);
        }

        if (callOnReload && typeof callback == "function") {
            callback.call($('#' + paneId), [true]);
        }

        location.reload();
    }
}

意味着调用此类的另一个构造函数并传递public Medico(string nome, string especialidade, int _NIF, string _inicio, string _fim) : this(nome, especialidade, _NIF, _inicio, _fim) 中的值。由于您只是传递this(...)_inicio的字符串,构造函数会尝试调用自身。我建议你想调用另一个构造函数:

_fim

要做到这一点,你需要先将字符串转换为DateTimes。也许是这样的:

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

只需更改模式