C# MVC - 继承和接口

本文关键字:接口 继承 MVC | 更新日期: 2023-09-27 18:31:19

我对这一切有点陌生。所以请耐心等待。

我有一个名为CrmObject的类,它被其他一些类(如Contact)继承。现在,我想编写一个接口以用于 CrmObject 的所有子类。我需要它用于Unity.MVC存储库。现在我为每个孩子班级都有一个界面,但应该有更好的方法来做到这一点,这就是我在这里的原因。我很高兴为此提供链接和示例。

波科斯:

public class CrmObject
{
    [Key]
    [Column(Order = 0)]
    public int Id { get; set; }
    public bool IsProcessed { get; set; }
    public string Error { get; set; }
    public long PartnerOID { get; set; }
    public OrdnungsbegriffeTypeType OrdnungsbegriffTyp { get; set; }
    [Required]
    public string OrdnungsbegriffTypString { get; set; }
    public string OrdnungsbegriffWert { get; set; }
    public CrmJob Job { get; set; }
    [ForeignKey("Job")]
    [Column(Order = 1)]
    public int JobId { get; set; }
}
[Table("Contacts")]
    public class Contact: CrmObject
    {
        public DateTime KontaktAm { get; set; }
        public string ErstelltVon { get; set; }
        public DateTime ErstelltAm { get; set; }
        public string Vorlage { get; set; }
}
[Table("Tasks")]
    public class Task: CrmObject
    {
        public long AufgabeOID { get; set; }
        public string ExterneId { get; set; }
        public string Aufgabendefinitionsname { get; set; }
}

接口:

public interface ICrmObjectRepository
{
    void Add(CrmObject o);
    void AddRange(IEnumerable<CrmObject> o);
    void Remove(int crmObjectId);
    IEnumerable<CrmObject> GetObjectsByJobId(int crmJobId);
    CrmObject FindById(int crmObjectId);
}
例如,我不仅想使用 CrmObject

类型作为 Add 函数的参数,还想使用 CrmObject 的所有子项。

也许我都错了,我想这样做的方式是愚蠢的,不可能的,或者两者兼而有之。我真的很想让有更多经验的人给我一些关于如何做到最好的提示。如果需要任何其他信息,请询问。

提前致谢

C# MVC - 继承和接口

查看 C# 中的泛型。 https://msdn.microsoft.com/en-us/library/512aeb7t.aspx

基本上你的界面看起来像这样:

public interface ICrmObjectRepository<T> where T: CrmObject   
{
    void Add(T o);
    void AddRange(IEnumerable<T> o);
    void Remove(int crmObjectId);
    IEnumerable<T> GetObjectsByJobId(int crmJobId);
    TFindById(int crmObjectId);
}

请注意 T: CrmObject 的位置。 这是一个约束。

https://msdn.microsoft.com/en-us/library/d5x73970.aspx

您可以像这样继承接口:

public interface IChildCrmObject : ITask, IContact, ICrmObject
{
    ....
}