如何定义类型T必须在C#中的通用抽象类中具有字段“ID”
发布时间:2020-12-15 08:48:48 所属栏目:百科 来源:网络整理
导读:我正在尝试创建一个通用类,这将允许我保存/删除客户,产品,以便我可以在一个地方拥有所有基本实现. public class Product : ItemDataServiceProduct{public int id {get; set;}}public class Customer : ItemDataServiceCustomer{public int id {get; set;}}p
我正在尝试创建一个通用类,这将允许我保存/删除客户,产品,以便我可以在一个地方拥有所有基本实现.
public class Product : ItemDataService<Product> { public int id {get; set;} } public class Customer : ItemDataService<Customer> { public int id {get; set;} } public abstract class ItemDataService<T,V> { public T Item { get; set; } public int Id { get; set; } public ItemDataService(T item) { Item = item; } public void SaveItem(T item) { if (Item.Id <= 0) { InsertItem(item); } } } 如何在ItemDataService类中访问customer类的Id属性,以便我可以检查Item.Id< = 0 解决方法
使用字段Id定义接口ISomeInterface,如:
public interface ISomeInterface { int Id { get; } } 然后你可以让你的抽象类实现该接口,并添加一个通用约束,要求T作为该接口的实现,如下所示: public abstract class ItemDataService<T> : ISomeInterface where T : ISomeInterface { public int Id { get; set; } // ... public void SaveItem(T item) { if (Item.Id <= 0) // Id is accessible now.. { InsertItem(item); } } } 编辑 实际上,鉴于您有趣的继承树,您根本不需要接口.您可以简单地添加一个通用约束,强制T成为ItemDataService< T>的子项.它看起来很有趣,但它有效: public abstract class ItemDataService<T> where T : ItemDataService<T> { public int Id { get; set; } // ... public void SaveItem(T item) { if (Item.Id <= 0) // Id is accessible now.. { InsertItem(item); } } } (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |