2012-03-10 99 views
-1
public class KI_Payments<TInfo1 ,TInfo2 , TInfo3, TInfo4, TInfo5> : KI_Leaf 
{ 
    TInfo1 A.... 
    TInfo2 B..... 
} 

KI_Payments<TInfo1,TInfo2,TInfo3,TInfo4,TInfo5> oPayment = new KI_Payments<TInfo1,TInfo2,TInfo3,TInfo4,TInfo5>(); 
switch (Something) 
{ 
    case 1: 
     oPayment = new KI_Payments<string, string, string,string,string>(); 
    case 2: 
     oPayment = new KI_Payments<string, int, int,int,int>(); 

} 

我想要做的是取決於「東西」,我想用不同的聲明聲明info1-info5。
有什麼想法? 感謝有人可以幫我理解這個例子的泛型嗎?

+2

您需要提供更多的上下文。我們不知道你的變量聲明在哪裏。一個簡短但完整的例子(理想情況下使用較少的類型參數)將會很有用。 – 2012-03-10 21:39:09

+0

如果您發現自己使用多於一個的參數化泛型,讓我們說3種類型,請停下來思考如果您做錯了什麼。 – 2012-03-10 21:40:39

+0

您能否詳細說明「用不同聲明聲明info1-info5」? – Tung 2012-03-10 21:40:47

回答

2

請注意,具有不同類型參數的通用付款不會與分配兼容。你不能這樣做

KI_Payment<T1,T2,T3,T4,T5> p = 
    new KI_Payment<string,int,int,int,int>(); // Does not compile! 

KI_Payment<object,object,object,object,object> p = 
    new KI_Payment<string,int,int,int,int>(); // Does not compile! 

相反,創建一個只有字符串屬性的基類,您可以從中加載並保存到數據庫。

public abstract class PaymentBase 
{ 
    public string Info1 { get; set; } 
    public string Info2 { get; set; } 
    public string Info3 { get; set; } 
    public string Info4 { get; set; } 
    public string Info5 { get; set; } 
} 

然後創建專門的付款類型與專門的屬性,這只是包裝的字符串屬性。這些屬性可以根據需要從字符串轉換爲字符串

public class PaymentTypeX : PaymentBase 
{ 
    public string Name 
    { 
     get { return Info1; } 
     set { Info1 = value; } 
    } 

    public int Number 
    { 
     get { 
      int n; 
      Int32.TryParse(Info2, out n); 
      return n; 
     } 
     set { Info2 = value.ToString(); } 
    } 
} 

最後實例具體的付款方式

PaymentBase payment; 
switch (Something) { 
    case 1:   
     payment = new PaymentTypeX(); 
     break; 
    case 2: 
     payment = new PaymentTypeY(); 
     break; 
} 
1

info1在一個實例信用卡號,而在另一個支票號碼,你實際去對待他們一模一樣的KI_Payments代碼?

如果您使用您需要的付款類型創建班級層次結構可能會更好。這樣,如果您確實需要對其中一個TInfos進行特殊處理,則可以更好地執行代碼重用。由於你的表有字符串列,這將使你的構造函數更容易取5個字符串參數並正確解釋它們。您尚未指定Something是什麼,但您可以使用類似Factory模式的內容來實現對象創建。

關於相關主題,如果我們正在談論數據庫,那麼在表中實際存儲其他類型的數據的表中包含字符串列的情況並不是一個好主意。

相關問題