2009-09-04 58 views
1

我有一個UserControl,它具有一個BaseClass對象作爲公共成員。現在,我做以下我需要實例化的對象類型之間進行辨別:構造函數多態幫助

Public WithEvents theForm As OrderForm 

Protected Sub Page_Load(ByVal sender As Object, _ 
    ByVal e As System.EventArgs) Handles Me.Load 

    Select Case Form 
     Case OrderItem.ItemsFor.Invoice 
      theForm = New Invoice(FormID) 
     Case OrderItem.ItemsFor.PurchaseOrder 
      theForm = New PurchaseOrder(FormID) 
    End Select 

End Sub 

如果雙方InvoicePurchaseOrder繼承OrderForm作爲其基類和FormID是一個整數。我知道這是錯誤的,但我想知道正確的方法來做到這一點。

回答

2

通常我會從後面的代碼中移除邏輯並創建一個簡單的抽象工廠。抽象工廠的目的是創建具有相同基本類型的對象,但可以辨別從鑑別器創建的類型。在C#中的一個簡單的例子如下:

public class OrderFormFactory 
{ 
    public static IOrderForm Create(string orderType, int formId) 
    { 
     IOrderType orderTypeToCreate = null; 
     switch(orderType) 
     { 
      case OrderType.Invoice: 
       orderTypeToCreate = new Invoice(formId); 
       break; 
      case OrderType.PurchaseOrder: 
       orderTypeToCreate = new PurchaseOrder(formId); 
       break; 
      default: 
       throw new ArgumentException("Order Type of " + orderType + " is not supported"; 
     } 
     return orderTypeToCreate; 
    } 
} 
+0

我沒有接口IOrderForm ...如果我返回的BaseClass,它仍然工作? – Jason

+0

是的,它仍然可以工作,我只是使用界面作爲例子。 –