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# 中的泛型。 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
{
....
}