Универсальная реализация compareto() доступность метода
Я пытаюсь реализовать универсальный код для обработки сбережений и проверки банковских счетов. Этот код должен работать в соответствии с приведенными ниже условиями.
1) Общие методы добавления() и снятия() для сберегательных и контрольных счетов.
2) общая реализация IComparable< T> Для сравнения любых двух счетов на основе баланса.
3) не должно быть никакого жестко закодированного литья типов.
interface IBankAccount { decimal Balance { get; set; } string AccountType { get; set; } bool Add(decimal amount); bool Withdraw(decimal amount); } abstract class BankAccount<T> : IBankAccount, IComparable<T> where T : IBankAccount { public decimal Balance { get; set; } = 0; public string AccountType { get; set; } = string.Empty; public bool Add(decimal amount) { Balance += amount; return true; } public bool Withdraw(decimal amount) { if ((Balance - amount) < 0) { return false; } Balance -= amount; return true; } public int CompareTo(T other) { if (this.Balance == other.Balance) { return 1; } else { return 0; } } } class SavingsAccount : BankAccount<SavingsAccount> { public SavingsAccount() { this.Balance = 500; this.AccountType = "Savings"; } } class CheckInAccount : BankAccount<CheckInAccount> { public CheckInAccount() { this.Balance = 1000; this.AccountType = "CheckIn"; } } class Customer { public IList<IBankAccount> accounts = new List<IBankAccount>(); public void CreateAccount<T>() where T : BankAccount<T>, new() { T account = new T(); accounts.Add(account); } } class Program { static void Main(string[] args) { Customer customer1 = new Customer(); customer1.CreateAccount<SavingsAccount>(); customer1.CreateAccount<CheckInAccount>(); Customer customer2 = new Customer(); customer2.CreateAccount<CheckInAccount>(); Customer customer3 = new Customer(); customer3.CreateAccount<SavingsAccount>(); customer3.CreateAccount<CheckInAccount>(); customer3.accounts[0].Add(500); // How can I compare customer3.accounts[0] and customer1.accounts[1] equality as I can't access CompareTo() method? Console.Read(); } }
Пожалуйста, предложите способ доступа к методу CompareTo ()? Я в порядке с интерфейсом IBankAccount, наследующим IComparable< T>, как показано ниже, если это простое решение.
interface IBankAccount<T> : IComprable<T> { }
Что я уже пробовал:
Я попробовал интерфейс IBankAccount, унаследовав интерфейс IComparable и пару других вещей, упомянутых в вопросе. Но во всех случаях я либо получал жестко закодированное приведение типов, либо не мог получить доступ к ожидаемым методам.