В чем разница между этими двумя типами наследования?
Я кодирую хранилище, и у меня возникла следующая проблема:
Приведенный ниже код показывает ошибку, как если бы хранилище наследовало интерфейс и тип IRepository. T
наследовал IDisposable
public class GenericRepository<T> : IGenericRepository<T> where T : class, IDisposable
Итак, когда я изменил порядок наследования, проблема была решена
public class GenericRepository<T> : IDisposable, IGenericRepository<T> where T : class
Мое решение этой проблемы его правильное?
4 ответа
В вашем первом фрагменте кода IDisposable
является частью ограничения.
Во втором фрагменте кода IDisposable
это интерфейс, который ваш GenericRepository<T>
реализует.
public class GenericRepository<T> : IGenericRepository<T> where T : class, IDisposable
ограничивает параметр типа T для реализации IDisposable
,
Со вторым кодом, который вы показываете, это GenericRepository<T>
что требуется для реализации IDisposable
интерфейс, независимо от того, что Т.
Бывший:
public class GenericRepository<T> : IGenericRepository<T> where T : class, IDisposable
обеспечивает соблюдение IDisposable
ограничение по типу T
, в то время как:
public class GenericRepository<T> : IDisposable, IGenericRepository<T> where T : class
требует GenericRepository<T>
реализовать IDisposable
,
Вам решать, как вы хотите создавать свои репозитории - я бы выбрал последнее. Я бы сказал, что ответственность хранилища - распоряжаться своими ресурсами.
Ну, ваша первая строка явно говорит, что T должен быть IDisposable.
Вторая строка говорит о том, что ваш GenericRepository должен быть IDisposable. Если это ваше намерение - да, ваше решение верное.