Причина, по которой компилятор выдал так много ошибок, состоит в том, что он ожидал идентификатор в <>
, но вы помещаете туда ключевое слово (string
). В результате компилятор запутался, и разбор был очень неправильным. По этой же причине количество ошибок меньше, если вы используете Guid
, потому что Guid
- это идентификатор. Но замена string
на Guid
тоже не дает того, чего вы ожидаете.
Кажется, вы хотите, чтобы DemoRepository
реализовал IDemoRepository
только в очень конкретном случае c, т.е. когда K
is string
.
Обратите внимание, что требование для реализации IDemoRepository
состоит в том, что он должен иметь метод generi c Get
, способный принимать любые введите K
и вернет Dto.Message
. Вот что означает:
public interface IGet<T>
{
T Get<K>(K id);
}
public interface IDemoRepository : IGet<Dto.Message>
{
}
Я полагаю, это не то, что вы действительно хотите, чтобы IDemoRepository
требовал? Если вы хотите, чтобы он требовал необщего метода c Get
. который принимает спецификацию c тип K
, который может быть выбран разработчиком, тогда вы можете сделать что-то вроде этого:
// I moved the generic parameter K from the method to the interface
public interface IGet<T, K>
{
T Get(K id);
}
public interface IDemoRepository<K> : IGet<Dto.Message, K>
{
}
// here the implementer chose string as K
public class DemoRepository : IDemoRepository<string>
{
public Dto.Message Get(string messageId)
{
...
}
}