Всякий раз, когда кто-то задает этот вопрос, я пытаюсь взять его пример и перевести его на что-то, используя более известные классы, что явно незаконно (это то, что Джон Скит сделал в своем ответе ; но яя делаю еще один шаг, выполняя этот перевод).
Давайте заменим MyEntityRepository
на MyStringList
, например так:
class MyStringList : List<string> { }
Теперь, кажется, вы хотите MyEntityRepository
чтобы быть преобразуемым в RepositoryBase<EntityBase>
, причина в том, что это должно быть возможно, поскольку MyEntity
происходит от EntityBase
.
Но string
происходит от object
, не так ли?Таким образом, по этой логике мы должны быть в состоянии привести MyStringList
к List<object>
.
Давайте посмотрим, что может произойти, если мы позволим это ...
var strings = new MyStringList();
strings.Add("Hello");
strings.Add("Goodbye");
var objects = (List<object>)strings;
objects.Add(new Random());
foreach (string s in strings)
{
Console.WriteLine("Length of string: {0}", s.Length);
}
Э-э-э,Внезапно мы перечислим более 1025 * и натолкнемся на 1026 * объект.Это нехорошо.
Надеюсь, это немного облегчает понимание проблемы.