Bob*_*les 3 c# asp.net oop entity-framework
我有以下抽象类和接口:
public interface ITypedEntity{
TypedEntity Type { get; set; }
}
public abstract class TypedEntity:INamedEntity{
public abstract int Id{get;set;}
public abstract string Name { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
但是当我尝试创建一个实现ITypedEntity的类并且具有TypedEntity的concrecte实现时,我得到以下错误
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'
Run Code Online (Sandbox Code Playgroud)
我的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; }
}
Run Code Online (Sandbox Code Playgroud)
我想我明白发生了什么,但我不知道为什么因为MagazineType是TypedEntity.
谢谢.
更新1 我必须提到我想在EF CodeFirst中使用这个类,并且我希望为实现ITypedEntity的每个类都有一个不同的表.
您需要将MagazineType更改为TypedEntity
public class Magazine:INamedEntity,ITypedEntity
{
public int Id {get;set;}
[MaxLength(250)]
public string Name {get;set;}
public TypedEntity Type { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
但是当你创建杂志的对象时,你可以为它分配派生类型
var magazine = new Magazine { Type = new MagazineType() }
Run Code Online (Sandbox Code Playgroud)
无所谓MagazineType是一个TypedEntity.想象一下,你有另一个ITypedEntity实现,NewspaperType.ITypedEntity接口的合同声明您必须能够:
ITypedEntity magazine = new Magazine();
magazine.Type = new NewspaperType();
Run Code Online (Sandbox Code Playgroud)
然而,这与您的代码相矛盾,其中Magazine.Type不接受其他子类型ITypedEntity.(我相信如果该物业只有一个吸气剂,你的代码将是有效的.)
解决方案是使用泛型:
interface ITypedEntity<TType> where TType : TypedEntity
{
TType Type { get; set; }
}
class Magazine : ITypedEntity<MagazineType>
{
// ...
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
162 次 |
| 最近记录: |