Прежде всего, зачем вам нужно указывать универсальный тип в ваших методах? Класс уже указывает универсальный тип, у вас будет доступ к нему в ваших методах:
public interface ISimpleCache<T1>
{
...
void ResetCache();
}
, что делает класс, реализующий интерфейс, намного проще:
internal class LocalDataObjectEngine_Cache : ISimpleCache<IBrokeredDataObject>
{
ISimpleCache<IBrokeredDataObject> _cache;
...
public void ResetCache();
{
//logic here with access to IBrokeredDataObject if needed
}
...
}
то же самое относится и к последнему методу, просто вызовите
_cache.ResetCache();
однако, если вам действительно необходимо по каким-либо причинам указать общий тип в методах, сделайте, как показано ниже
Давайте начнем:
Почему бы вам не использовать T1 в методе вместо того, чтобы указывать T, должно быть похоже на T1?
public interface ISimpleCache<T1>
{
...
void ResetCache<T1>();
}
В вашем LocalDataObjectEngine_Cache вам не нужно снова указывать T, просто используйте IBrokeredDataObject (если вы не реализуете метод и щелкните правой кнопкой мыши на имени интерфейса, чтобы выбрать «реализовать интерфейс», он запишет его ниже:
internal class LocalDataObjectEngine_Cache : ISimpleCache<IBrokeredDataObject>
{
ISimpleCache<IBrokeredDataObject> _cache;
...
public void ResetCache<IBrokeredDataObject>();
{
//logic here
}
...
}
Затем из вашего последнего класса просто вызовите его снова, указав фактический класс, которым вы хотите, чтобы T был:
public partial class LocalDataObjectEngine : IEngine
{
ISimpleCache<IBrokeredDataObject> _cache = new LocalDataObjectEngine_Cache();
public void ResetCache<IBrokeredDataObject>()
{
_cache.ResetCache<IBrokeredDataObject>();
}
}