У меня есть следующий класс:
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 и т. д.).
Есть ли способ сделать это, если нет базового класса? Спасибо!