2017-10-04 63 views
1

为了在我的类中需要虚拟集合类型,是否有可能创建接口?虚拟集合的接口

问候

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; } 
    } 
} 

回答

2

virtual是一个实现细节不是合同(即interface)的细节。


虚拟关键字被用于修改的方法,属性,索引或事件声明和允许它在派生类重写。

标志着我从documentation该说明的关键部分以粗体

+0

在一个单一的行中很好的解释! –

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; } 
} 
0

为了重写方法,属性,事件,索引必须是虚拟的。但是,如果它们是虚拟的,它不是强制性的以覆盖它们可选的。如果我们谈论抽象类,抽象类的成员是隐含的虚拟。这就是为什么我们需要在某些子类中定义它们时使用override关键字的原因。