我正在尝试创建一个通用类,这将允许我保存/删除客户,产品,以便我可以在一个地方拥有所有基本实现.
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);
}
}
}
Run Code Online (Sandbox Code Playgroud)
我如何在课堂上访问课程的Id属性,以便我可以检查customerItemDataServiceItem.Id <= 0
ISomeInterface使用字段定义接口Id,如:
public interface ISomeInterface
{
int Id { get; }
}
Run Code Online (Sandbox Code Playgroud)
然后你可以使你的抽象类实现该接口,并添加一个通用约束,该约束需要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);
}
}
}
Run Code Online (Sandbox Code Playgroud)
编辑
实际上,鉴于您有趣的继承树,您根本不需要接口.您可以简单地添加一个强制执行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);
}
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
205 次 |
| 最近记录: |