Способ определения интерфейса, вызов метода в реализации интерфейса требует указания базового типа <T>
. В этот момент вы могли бы также кастовать.
[Отредактировано в примечании] Кроме того, базовый класс для универсального метода ограничен отдельным методом, а не классом / интерфейсом, который, вероятно, был причиной вашего проблемы.
Прежде всего, я бы упростил ваш интерфейс до чего-то вроде этого:
public interface IStorage<T> where T : class
{
T this[ string id ] { get ; set ; }
}
Тогда я бы реализовал что-то вроде:
public class Repository : IStorage<Widget>
{
private IDictionary<string,Widget> backingStore = new Dictionary<string,Widget>() ;
public Widget this[string id]
{
get
{
Widget instance ;
bool exists = backingStore.TryGetValue(id, out instance ) ;
return instance ; // null if the dictionary doesn't contain the key
}
set
{
if ( string.IsNullOrWhiteSpace(id) ) throw new ArgumentException("id") ;
if ( value == null ) throw new ArgumentNullException("value") ;
backingStore.Add( id , value ) ;
return ;
}
}
}