有人可以帮助我理解此示例的泛型吗?
本文关键字:泛型 帮助 | 更新日期: 2023-09-27 18:27:34
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。
有什么想法吗?谢谢
请注意,具有不同类型参数的通用付款将不兼容分配。你不能这样做
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;
}
假设info1
在一个实例化中是信用卡号,在另一个实例中是支票号,您实际上打算在KI_Payments
代码中将它们完全相同吗?
如果您使用所需的付款类型创建类层次结构可能会更好。这样,如果您确实需要对这些TInfos
之一进行特殊处理,则可以更好地进行代码重用。由于您的表具有字符串列,这将使您的构造函数更容易采用 5 个字符串参数并正确解释它们。您尚未指定Something
是什么,但您可以使用类似于工厂模式的东西来实现对象创建。
在相关主题上,拥有带有字符串列的表,您可以在其中实际存储其他类型的数据,这可以说不是一个好主意,尤其是当我们谈论数据库时。