虚拟集合的接口

时间:2017-10-04 13:21:26

标签: c# interface

是否有可能创建一个接口以便在我的类中要求虚拟集合类型?

此致

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

3 个答案:

答案 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关键字的原因。