C# 虚拟馆藏界面

C# 虚拟馆藏界面,c#,interface,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;

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

问候

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; }
    }
}
名称空间模型.实体
{
公共部分类文件类型:IMyInterface
{
公共长公司ID{get;set;}
公共长文件类型ID{get;set;}
公共字符串接受类型{get;set;}
//界面合同
公共虚拟ICollection文件类型转换{get;set;}
公共文件类型()
{
this.FileTypeTranslations=新哈希集();
}
}
公共类翻译:实体翻译
{
[必需]
公共字符串类型名{get;set;}
}
}
否。是实施细节,不是合同细节


virtual关键字用于修改方法、属性、索引器或事件声明,并允许在派生类中重写它。

我用粗体标记了描述的关键部分。编号是实施细节,而不是合同细节


virtual关键字用于修改方法、属性、索引器或事件声明,并允许在派生类中重写它。


我用粗体标记了该描述的关键部分,您可以尝试使用
抽象类
而不是
接口
。因此,在继承自
文件类型
的类中,您可以
再次重写
此属性,即
虚拟
访问修饰符在
文件类型
声明中的行为:

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; }
}
公共抽象类MyInterface
{
公共抽象ICollection文件类型转换{get;set;}
}
公共类文件类型:MyInterface
{
公共重写ICollection文件类型转换{get;set;}
}
公共类FileTypeInherited:FileType
{
公共重写ICollection文件类型转换{get;set;}
}

您可以尝试使用
抽象类
而不是
接口
。因此,在继承自
文件类型
的类中,您可以
再次重写
此属性,即
虚拟
访问修饰符在
文件类型
声明中的行为:

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; }
}
公共抽象类MyInterface
{
公共抽象ICollection文件类型转换{get;set;}
}
公共类文件类型:MyInterface
{
公共重写ICollection文件类型转换{get;set;}
}
公共类FileTypeInherited:FileType
{
公共重写ICollection文件类型转换{get;set;}
}

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

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