是否有可能创建一个接口以便在我的类中要求虚拟集合类型?
此致
namespace Models.Entities
{
public partial class FileType : IMyInterface
{
public long CompanyId { get; set; }
public long FileTypeId { get; set; }
public string AcceptType { get; set; }
//IMyInterface contract
public virtual ICollection<Translation> FileTypeTranslations { get; set; }
public FileType()
{
this.FileTypeTranslations = new HashSet<FileTypeTranslation>();
}
}
public class Translation : EntityTranslation<long, FileType>
{
[Required]
public string TypeName { get; set; }
}
}
答案 0 :(得分:2)
没有。 virtual是一个实现细节,而不是合同(即interface)细节。
virtual关键字用于修改方法,属性,索引器或事件声明,允许在派生类中重写它。
我从documentation以粗体
标记了该说明的关键部分答案 1 :(得分:2)
您可以尝试使用abstract class
代替interface
。因此,在继承自FileType
的类中,您可以再次override
此属性,即在virtual
声明中使用FileType
访问修饰符的行为:
public abstract class MyInterface
{
public abstract ICollection<Translation> FileTypeTranslations { get; set; }
}
public class FileType : MyInterface
{
public override ICollection<Translation> FileTypeTranslations { get; set; }
}
public class FileTypeInherited : FileType
{
public override ICollection<Translation> FileTypeTranslations { get; set; }
}
答案 2 :(得分:0)
为了覆盖方法,属性,事件,索引器,它们必须是虚拟的。但如果它们是虚拟的,则不必强制覆盖它们的可选项。如果我们谈论抽象类,抽象类的成员是隐式虚拟的。这就是我们在某些子类中定义它们时需要使用override关键字的原因。