我正在尝试创建一个通用类,它允许我保存/删除客户、产品,这样我就可以在一个地方完成所有基本实现。
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);
}
}
}
我如何访问 Id
customer
的属性(property)在 ItemDataService
中上课类,这样我就可以检查Item.Id <= 0
最佳答案
定义接口(interface)ISomeInterface
有一个字段 Id
,比如:
public interface ISomeInterface
{
int Id { get; }
}
然后您可以让您的抽象类实现该接口(interface),并添加一个需要 T
的通用约束。成为该接口(interface)的实现,如下所示:
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);
}
}
}
编辑
实际上,鉴于您有趣的继承树,您根本不需要接口(interface)。您可以简单地添加一个强制执行 T
的通用约束。成为 ItemDataService<T>
的 child .它看起来很有趣,但它确实有效:
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);
}
}
}
关于c# - 如何在 C# 的通用抽象类中定义类型 T 必须具有字段 “ID”,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37489793/