В чем разница между этими двумя типами наследования?

Я кодирую хранилище, и у меня возникла следующая проблема:

Приведенный ниже код показывает ошибку, как если бы хранилище наследовало интерфейс и тип 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. Если это ваше намерение - да, ваше решение верное.

Другие вопросы по тегам