У меня есть следующий класс:
public class MonthlyQuota
{
public virtual EmployeeVacationForm Form { get; set; }
public virtual DateTime? DateEmployeeSubmitted => Form?.DateCreated;
public MonthlyQuota(QuarterlylSupport document)
: this()
{
Document = document;
}
internal MonthlyQuota(
QuarterlylSupport document,
EmployeeVacationForm form)
: this(document)
{
Form = form;
form.QuotaResult = this;
}
Он используется следующим образом:
var staffResults = vacations.Select(vf => new MonthlyQuota(vf)); //where `vf` is the vacation form
Прямо сейчас нужно только EmployeeVacationForm
, но мне нужно добавить еще одну форму под названием EmployeeVacationForm_Remote
и вызвать ее так:
var staffResults = vacations.Select(rvf => new MonthlyQuota(rvf)); //where `rvf` is the remote vacation form
Итак, как в моем классе MonthlyQuota
объект Form
может быть либо EmployeeVacationForm
, либо EmployeeVacationForm_Remote
?
Спасибо!
Чтобы свойство Form в вашем классе MonthlyQuota принимало либо EmployeeVacationForm
, либо EmployeeVacationForm_Remote
, вы можете определить базовый класс или интерфейс, который оба EmployeeVacationForm
и EmployeeVacationForm_Remote
наследуют или реализуют. Затем вы можете использовать этот общий базовый класс или интерфейс в качестве типа свойства Form.
Предполагая, что у вас есть базовый класс BaseEmployeeVacationForm
, вы можете изменить свой MonthlyQuota
класс следующим образом:
public class MonthlyQuota
{
public virtual BaseEmployeeVacationForm Form { get; set; }
public virtual DateTime? DateEmployeeSubmitted => Form?.DateCreated;
public MonthlyQuota(QuarterlySupport document)
{
Document = document;
}
public MonthlyQuota(QuarterlySupport document, BaseEmployeeVacationForm form)
: this(document)
{
Form = form;
form.QuotaResult = this;
}
}
В этом случае и EmployeeVacationForm
, и EmployeeVacationForm_Remote
должны наследовать от BaseEmployeeVacationForm
. Таким образом, вы можете передать любой объект, который является подклассом BaseEmployeeVacationForm
, в свойство Form MonthlyQuota
.
Затем, когда вы создаете объект MonthlyQuota
, вы можете передать либо EmployeeVacationForm
, либо EmployeeVacationForm_Remote
:
var StaffResults = Vacations.Select(vf => new MonthlyQuota(document, vf)); вар RemoteStaffResults = RemoteVacations.Select(rvf => new MonthlyQuota(document, rvf));
Не забудьте настроить классы EmployeeVacationForm
и EmployeeVacationForm_Remote
для наследования от BaseEmployeeVacationForm
.
Если вы хотите, чтобы объект Form
в вашем классе MonthlyQuota
был либо EmployeeVacationForm
, либо EmployeeVacationForm_Remote
без общего базового класса, вы можете добиться этого, используя общий интерфейс, который реализуют оба класса.
Вот как вы можете изменить свой класс MonthlyQuota
:
публичный класс MonthlyQuota
{
public virtual IEmployeeVacationForm Form { get; set; }
public virtual DateTime? DateEmployeeSubmitted => Form?.DateCreated;
public MonthlyQuota(QuarterlylSupport document, IEmployeeVacationForm form)
{
Document = document;
Form = form;
form.QuotaResult = this;
}
}
Затем вы можете определить интерфейс IEmployeeVacationForm
, который будут реализовывать как EmployeeVacationForm
, так и EmployeeVacationForm_Remote
:
public interface IEmployeeVacationForm
{
DateTime DateCreated { get; set; }
MonthlyQuota QuotaResult { get; set; }
// Any other properties or methods needed
}
Просто убедитесь, что оба EmployeeVacationForm
и EmployeeVacationForm_Remote
реализуют интерфейс с необходимыми свойствами (DateCreated
, QuotaResult
и т. д.).
Есть ли способ сделать это, если нет базового класса? Спасибо!