我正在创建一个包含产品和产品类别的产品网站,我创建了以下类:
public abstract class Product
{
public int ProductId { get; set; }
public string ProductName { get; set; }
public string ProductCode { get; set; }
public int ProductCatagoryId { get; set; }
}
public class DryFruits : Product
{
public decimal WeightInGrams { get; set; }
public decimal RatePerGram { get; set; }
}
public class DryFruitsPacks : Product
{
public string PackName { get; set; }
public decimal PackWeight { get; set; }
public decimal PackPrice { get; set; }
}
我想要一个方法AddProduct()
,它必须存在于从产品派生的每个类中,并将该产品添加到数据库中。
答案 0 :(得分:1)
public class Product : IAddProduct
{
public int ProductId { get; set; }
public string ProductName { get; set; }
public string ProductCode { get; set; }
public int ProductCatagoryId { get; set; }
public virtual void Add(Product p)
{
//Save to db
};
}
public class DryFruits : Product
{
public decimal WeightInGrams { get; set; }
public decimal RatePerGram { get; set; }
public override void Add(Product p)
{
//Save to db
}
}
public interface IAddProduct
{
void Add(Product product)
}
Public class SomeClass
{
Product product = new DryFruits()
{
ProductName = "Nut";
WeightInGrams = 0.01;
}
private IAddProduct _saveIt;
_saveIt.Add(product)
}
Public class SomeOtherClass
{
Product product = new Product()
{
ProductName = "Orange";
}
private IAddProduct _saveIt;
_saveIt.Add(product)
}
我一直认为抽象类是一个穷人的界面版本。即使使用上面的代码,它也符合SO要求的目的。
答案 1 :(得分:0)
您应该为基础Product类添加一个抽象类。并在派生类中覆盖它。
public abstract class Product
{
public int ProductId { get; set; }
public string ProductName { get; set; }
public string ProductCode { get; set; }
public int ProductCatagoryId { get; set; }
public abstract void Save();
}
public class DryFruits : Product
{
public decimal WeightInGrams { get; set; }
public decimal RatePerGram { get; set; }
public override void Save()
{
//save the product
}
}
答案 2 :(得分:0)
派生类。在创建DryFruits或DryFruitsPacks等派生类时,必须为抽象类中的所有抽象方法提供重写方法。两个派生类中的AddProduct()方法都满足此要求。
覆盖 Int领域。抽象类可以在其中包含实例字段。派生类可以通过基本语法访问该字段..
内部 无法实例化抽象类。抽象类的重要部分是,您永远不能将它与派生类分开使用。
public abstract class Product
{
public int ProductId { get; set; }
public string ProductName { get; set; }
public string ProductCode { get; set; }
public int ProductCatagoryId { get; set; }
public abstract void AddProduct(params object[] arguments);
}