我在許多設計書中遇到了'程序到界面而不是執行'這一行。通過堅持這一點,我們可以消除緊密耦合,我們也可以實現抽象。我有一個場景,我想實現這一點,但不知道我有限的知識。編程到一個接口
我有一個類和一些屬性集。經過一段時間後,我的要求發生了變化,並被迫添加了一個名爲ItemAssociatedToProduct
和ItemAssociatedToOffers
的兩個屬性。使用這些屬性創建對象會讓我擔心,並決定通過讓Offer
類和Product
類繼承Item
類來拆分類。我認爲要消除具體的實現我的對象。所以在我的UI類我想創建一個這樣的對象,
Item myItem = new Product() // or Offer()
這樣我就可以實現抽象了。但由於Item類不具有派生類所具有的其他屬性,因此我無法引用它。我以爲我應該使用「is」檢查來識別類型並將其類型轉換爲相應的對象。但它又一次擊敗了灌木叢。是不是有辦法解決我的情況,但同時堅持抽象或這個原則只是爲了將它用於行爲(方法/功能)而不是數據(屬性)?
Adam Liss - >現在是否正確:)?
class Program
{
static void Main(string[] args)
{
Item myProduct = new Product();
myProduct.ProductName = "CellPhone";
myProduct.ProductPrice = "$300";
myProduct.ItemType = myProduct.GetProductOrOffer();
Item myOffer = new Offer();
myOffer.ProductName = "CellPhoneCover";
myOffer.ProductPrice = "$0";
myOffer.ItemType = myOffer.GetProductOrOffer();
}
}
interface Item
{
String GetProductOrOffer();
String ProductName
{
get;
set;
}
String ProductPrice
{
get;
set;
}
String ItemType
{
get;
set;
}
}
class Product : Item
{
public String GetProductOrOffer()
{
return "Product";
}
public String ItemType
{
get;
set;
}
public string ProductName
{
get;
set;
}
public string ProductPrice
{
get;
set;
}
}
class Offer : Item
{
public String GetProductOrOffer()
{
return "Offer";
}
public String ItemType
{
get;
set;
}
public string ProductName
{
get;
set;
}
public string ProductPrice
{
get;
set;
}
}
不完全。將變量聲明爲'Product'或'Offer'類型。一個'Item'不應該知道'Product'或'Offer'類。 (如果添加一個新的子類,則不需要更改'Item'。)如果ItemType指示實際類型,則構造函數應該爲每個類進行適當的設置。它應該是不可變的(const),'GetProductOrOffer()'實際上是'GetItemType()'。 – 2012-03-24 11:17:34