您的问题非常广泛,正如@doogle 在评论中提到的那样,抽象类和接口不一定与特定类型的项目相关联,而是基于您的设计。
在不了解您的电子商务或商店管理应用程序的设计的情况下,不可能为您提供任何具体帮助,但在阅读您之前的一个问题时,您似乎正在尝试了解抽象类和接口如何能够提供帮助你,所以这里有一个基本的例子,可以为你指明正确的方向。
在假设的商店中,您有数千种不同的产品,并且您希望在您的应用程序中跟踪它们。显然,所有产品都有一些共同点,例如制造商、价格、部门、数量,但也有可能仅适用于特定产品的信息片段(衣服有尺寸,但 DVD 没有)。
一个解决方案可能是创建一个Product
对所有产品都通用的接口,但允许每个类实现该接口并添加自己的属性。现在,您可以保证任何产品类别都至少具有这些共同成员。
这是一个假设的产品界面:
public interface IProduct
{
decimal SellingPrice { get; set; }
decimal StoreCost { get; set; }
int QuantityOnHand { get; set; }
string Manufacturer { get; set; }
string DepartmentName { get; set; }
decimal CalculateProfit();
}
然后你可以创建一个抽象类来实现IProduct
. 这是一个实现IProduct
但还添加了一个Size
字段的服装产品
public abstract class ClothingProduct : IProduct
{
public string Size { get; set; }
public decimal SellingPrice { get; set; }
public decimal StoreCost { get; set; }
public int QuantityOnHand { get; set; }
public string Manufacturer { get; set; }
public string DepartmentName { get; set; }
// by marking CalculateProfits abstract, you can let every class that inherits
// from ClothingProduct decide how to calculate the profit based on the selling
// costs of that product
public abstract decimal CalculateProfit();
}
现在您有了一个ClothingProduct
类,然后您可以为商店中的一些商品创建类。这是一个鞋子和衬衫类:
public class Shirt : ClothingProduct
{
public override CalculateProfit()
{
return this.SellingPrice - this.StoreCost - this.CalculateSellingCosts();
}
private decimal CaclulateSellingCosts()
{
// some code that would let you calculate the selling costs and
// overhead costs associated with this specific product
}
}
public class Shoes : ClothingProduct
{
private const decimal commissionRate = 0.05;
public override CalculateProfit()
{
return this.SellingPrice - this.StoreCost - this.CalculateSellingCosts() - this.CalculateCommission();
}
private decimal CaclulateSellingCosts()
{
// some code that would let you calculate the selling costs and
// overhead costs associated with this specific product
}
private decimal CalculateCommission()
{
return this.SellingPrice * commissionRate;
}
}
最后,两者Shoes
和Shirt
都是IProducts
因为它们继承了ClothingProduct
which 又实现了IProduct
.
您能否为整个商店中的其他产品创建其他类或抽象类,但只要实现IProduct
,您就可以保证它们将拥有属于IProduct
.
这有助于您甚至可以创建接口类型的集合并将所有产品添加到其中,因为所有实现IProduct
// a hypothetical method that grabs everything (maybe from a database)
List<IProduct> products = GetAllProducts();
// this query would give you the total number of items in your inventory
var totalItems = products.Select(quant => quant.QuantityOnHand).Sum();
// and this would calculate the total value of the products based on the store's cost
var totalCost = products.Select(quant => quant.StoreCost).Sum();
这两个查询只是人为的示例,因为在数据库中执行此操作同样容易(如果这是存储所有内容的地方),但我这样做只是为了给您提供一个示例,说明如何将所有相关项目绑定回单个界面可以帮忙