c# - 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);
}
}
解决方案
创建一个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)
,
推荐阅读
- flutter - 如何在不改变 AppBar 的情况下更改 TabBar 的背景颜色?
- python - 在 pandas 中按照数据框进行操作
- javascript - Safari 不会按时触发选择元素上的点击事件
- c# - 将键值对作为.txt文件中的资源绑定到wpf UI控件c#
- php - 工厂模式应该如何与 Slim 框架一起使用?
- c - Marco function error expected declaration specifiers or '...' before '{' token
- python-3.x - 计数器程序不工作 Python 3
- jenkins - 特定阶段 Jenkins Pipeline 上的触发器
- c++ - C++: Get adress of complete object containing member subobject
- python - Animate scatter plot according to year in a XLS file