Общее ограничение, чтобы ограничить коллекцию таким же типом производных объектов
Я хочу ограничить коллекцию, чтобы иметь только один и тот же тип класса, используя общий.
public class InvoiceLine<T> where T : TransactionLine ,new()
{
private readonly IList<TransactionLine> _transactionLines = new List<TransactionLine>();
public virtual IReadOnlyCollection<TransactionLine> TransactionLines => new ReadOnlyCollection<TransactionLine>(_transactionLines);
public virtual void AddTransactionLine(TransactionLine transactionLine)
{
transactionLine.ThrowIfNull(nameof(transactionLine), "can't be null");
_transactionLines.Add(transactionLine);
}
protected TransactionLine()
{
//doing some validation related stuff here.
}
}
public abstract class TransactionLine : BaseEntity, IPeopleSoftCostCode, ICustomerAccountNumber
{
public virtual InvoiceLine<TransactionLine> InvoiceLine { get; set; }
}
public class PermTransactionLine : TransactionLine
{
public Perm Perm { get; set; }
}
public class TempTransactionLine : TransactionLine
{
public Temp Temp { get; set; }
}
я хочу иметь InvoiceLine.TransactionLines
содержать тот же тип TransactionLine
не PermTransactionLine
а также TempTransactionLine
вместе в то же время. TransactionLine
должен быть абстрактным - не хочу создавать объект напрямую.
Я пытаюсь добавить new()
согласен, но не работает, он говорит:
TransactionLine должен иметь открытый конструктор без параметров.
Затем я использую InvoiceLine, чтобы добавить его в счет-фактуру - изначально у меня есть все типы линий транзакций вместе в рамках биллингового прогона, а затем я буду создавать счета-фактуры для определенного типа транзакции.
Есть идеи, как мне этого добиться?
1 ответ
Вы можете определить
public class PermInvoiceLine : InvoiceLine<PermTransactionLine> { }
public class TempInvoiceLine : InvoiceLine<TempTransactionLine> { }
и использовать соответствующие XXXInvoiceLine
для каждого XXXTransactionLine
,
Нет смысла определять T : new()
ограничение в этом конкретном случае.