首页 > 解决方案 > C# 在另一个构造函数中使用构造函数

问题描述

我正在尝试创建一个构造函数来查找对象,然后使用不同的构造函数。

我不希望有两个在两者中执行相同代码的构造函数,如果发生更改,我将不得不同时更改两者。

public DokumentHandlowyC(DokumentHandlowy dokumentHandlowy)
{
    Guid = dokumentHandlowy.Guid;
    KontrahentC = new KontrahentC(dokumentHandlowy.Kontrahent);
    Numer = dokumentHandlowy.Numer.ToString();
    Obcy = dokumentHandlowy.Obcy.Numer;
    Date = dokumentHandlowy.Data;
    Pozycje = dokumentHandlowy.Pozycje.Select(x => new PozycjaDokHandlowegoC(x)).ToList();
    KierunekVAT = dokumentHandlowy.Definicja.LiczonaOd;
    Wartosc_Brutto = new CurrencyC(dokumentHandlowy.BruttoCy);
}

public DokumentHandlowyC(Guid guid)
{
    eaContext ea = new eaContext();

    using (var session = ea.Login.CreateSession(true, false))
    {
        var HM = HandelModule.GetInstance(session);
        dokumentHandlowy = null;
        try
        {
            dokumentHandlowy = HM.DokHandlowe[guid];
        }
        catch (Exception)
        {
            throw new Enova_BrakWskazanegoObiektu($"DokumentHandlowy o Guid: '{guid.ToString()}'{System.Environment.NewLine}nie istnieje.");
        }

        //How use the contructor with DokumentHandlowy here?

        //Guid = dokumentHandlowy.Guid;
        //KontrahentC = new KontrahentC(dokumentHandlowy.Kontrahent);
        //Numer = dokumentHandlowy.Numer.ToString();
        //Obcy = dokumentHandlowy.Obcy.Numer;
        //Date = dokumentHandlowy.Data;
        //Pozycje = dokumentHandlowy.Pozycje.Select(x => new PozycjaDokHandlowegoC(x)).ToList();
        //KierunekVAT = dokumentHandlowy.Definicja.LiczonaOd;
        //Wartosc_Brutto = new CurrencyC(dokumentHandlowy.BruttoCy);
    }
}

标签: c#constructor

解决方案


创建一个private执行共享功能的方法(在您的示例中,填充变量)并从两个构造函数中调用该方法。请参见下面的示例:

class Program
{
    public string Title { get; set; }
    public Guid Id { get; set; }

    public Program(Guid _ProgramId) {
        this.Id = _ProgramId;
        this.PopulateFields();
    }


    public Program(int _ProgramNumber)
    {
        this.PopulateFields();
    }


    private void PopulateFields()
    {
        this.Title = "New Title";
    }
}

如果你想从另一个构造函数调用另一个构造函数,那么你也需要将值传递给另一个构造函数,以便在启动类时调用另一个构造函数,不可能从另一个构造函数的主体..

public Program(int _ProgramNumber, Guid _ProgramId) : this(_ProgramId) { }

在上面的例子中,带有两个参数的构造函数也会调用Program(Guid _ProgramId),


推荐阅读