я следующий абстрактный класс и интерфейс:Заменить базовый класс с конкретной реализации C#
public interface ITypedEntity{
TypedEntity Type { get; set; }
}
public abstract class TypedEntity:INamedEntity{
public abstract int Id{get;set;}
public abstract string Name { get; set; }
}
Но когда я пытаюсь создать класс, который реализует ITypedEntity и имеет реализацию concrecte из TypedEntity я получаю следующее ошибка
Magazine does not implement interface member ITypedEntity.Type. Magazine.Type cannot implement 'ITypedEntity.Type' because it does not have the matching return type of 'TypedEntity'
код для моей реализации concrecte ниже
public class Magazine:INamedEntity,ITypedEntity
{
public int Id {get;set;}
[MaxLength(250)]
public string Name {get;set;}
public MagazineType Type { get; set; }
}
public class MagazineType : TypedEntity
{
override public int Id { get; set; }
override public string Name { get; set; }
}
Я думаю, что понимаю, что происходит, но я не знаю, почему, потому что MagazineType - это TypedEntity.
Спасибо.
Update 1 Я должен отметить, что я хочу, чтобы использовать эти классы с EF CodeFirst и я хочу иметь другую таблицу для каждого из классов, реализующих ITypedEntity.
MagazineType является TypedEntity но TypedEntity я sn't a MagazineType. Возможно, вы можете определить свой интерфейс как 'ITypedEntity Type {get; задавать; } ' –
Но код, имеющий ссылку на журнал, хранящийся в переменной типа« ITypedEntity », может попытаться сохранить что-то, что * не является *' MagazineType', в свойство 'Type'. –
изменить тип возврата 'Magazine.Type' на' EntityType'. Он все равно может быть экземпляром 'MagazineType', но подпись должна совпадать, чтобы насытить внедрение интерфейса. – Jodrell