2017-10-04 60 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關鍵字的原因。