阴影或通用属性? [英] shadowing or generic properties?
本文介绍了阴影或通用属性?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
嗨朋友们,
我有两个班级 PaymentMethod
和 EditPaymentMethod
,包含以下属性:
公共类PaymentMethod
{
public int TenantID {get;组; }
public string Market {get;组; }
公共虚拟列表< string> CreditCard {get;组; }
公共虚拟列表< string> DebitCard {get;组; }
公共虚拟列表< string> BPay {get;组; }
}
公共类EditPaymentMethod
{
public int TenantID {get;组; }
public string Market {get;组; }
public List< Multicheckbox> CreditCard {get;组; }
public List< Multicheckbox> DebitCard {get;组; }
public List< Multicheckbox> BPay {get;组; }
}
公共类Multicheckbox
{
public string CheckboxName {get;组; }
public bool IsChecked {get;组; }
}
正如你所看到的,这两个类只有 CreditCard
, DebitCard
和 BPay
我想避免这个代码重复,如何我可以使用阴影属性或使其成为泛型来实现这一目标吗?
对此有任何建议吗?
在此先感谢
解决方案
我使用了如下通用类
公共类GenericPaymentMethod < T >
{
public int TenantID {get;组; }
public string Market {get;组; }
public List < T > CreditCard {get;组; }
public List < T > DebitCard {get;组; }
public List < T > BPay {get;组; }
}
公共类PaymentMethod
{
public GenericPaymentMethod < string > MyProperty {get;组; }
}
公共类EditPaymentMethod
{
public GenericPaymentMethod < Multicheckbox > MyProperty {get;组; }
}
我在模型中按以下方式访问
public static EditPaymentMethod GetPaymentMethodDetails(int tenantID){
EditPaymentMethod obj = new EditPaymentMethod();
obj.MyProperty = new GenericPaymentMethod < Multicheckbox > 跨度>();
obj.MyProperty.TenantID = 1000;
obj.MyProperty.Market =AU;
obj.MyProperty.CreditCard = new List < Multicheckbox > (){
new Multicheckbox {CheckboxName =Amex,IsChecked = true},
new Multicheckbox {CheckboxName =Master Card,IsChecked = false},
new Multicheckbox {CheckboxName =Visa,IsChecked = true}
};
obj.MyProperty.DebitCard = new List < Multicheckbox > (){
new Multicheckbox {CheckboxName =Amex,IsChecked = false},
new Multicheckbox {CheckboxName =Master Card,IsChecked = true},
new Multicheckbox {CheckboxName =Visa,IsChecked = false}
};
obj.MyProperty.BPay = new List < Multicheckbox > (){
new Multicheckbox {CheckboxName =Savings Check,IsChecked = true},
new Multicheckbox {CheckboxName =Credit Card,IsChecked = false},
};
return obj;
}
在视图中
< div>
< div>
@ Html.Label(借记卡:)
< / div>
@for(int i = 0; i< Model.MyProperty.DebitCard.Count; i ++)
{
< div>
< div>
@ Html.CheckBoxFor(x => x.MyProperty.DebitCard [i] .IsChecked)
< / div>
< div>
@ Model.MyProperty.DebitCard [i] .CheckboxName
@ Html.HiddenFor(x => Model.MyProperty.DebitCard [i] .CheckboxName)
< / div>
< / div>
}
@ Html.HiddenFor(model => Model.AtleastOneDebitCardSelected)
@ Html.ValidationMessageFor(model => Model.AtleastOneDebitCardSelected)
< / div>
Hi friends,
I have two classes PaymentMethod
and EditPaymentMethod
with following properties:
public class PaymentMethod { public int TenantID { get; set; } public string Market { get; set; } public virtual List<string> CreditCard { get; set; } public virtual List<string> DebitCard { get; set; } public virtual List<string> BPay { get; set; } } public class EditPaymentMethod { public int TenantID { get; set; } public string Market { get; set; } public List<Multicheckbox> CreditCard { get; set; } public List<Multicheckbox> DebitCard { get; set; } public List<Multicheckbox> BPay { get; set; } } public class Multicheckbox { public string CheckboxName { get; set; } public bool IsChecked { get; set; } }
As you can see both the classes differ only in CreditCard
, DebitCard
and BPay
I want to avoid this code duplication, how can I achieve this using shadowing properties or making it generics?
Any suggestion on the same?
Thanks in advance
解决方案
I made use of generic class as below
public class GenericPaymentMethod<T> { public int TenantID { get; set; } public string Market { get; set; } public List<T> CreditCard { get; set; } public List<T> DebitCard { get; set; } public List<T> BPay { get; set; } } public class PaymentMethod { public GenericPaymentMethod<string> MyProperty { get; set; } } public class EditPaymentMethod { public GenericPaymentMethod<Multicheckbox> MyProperty { get; set; } }
And in model I accessed in following way
public static EditPaymentMethod GetPaymentMethodDetails(int tenantID) { EditPaymentMethod obj = new EditPaymentMethod(); obj.MyProperty = new GenericPaymentMethod<Multicheckbox>(); obj.MyProperty.TenantID = 1000; obj.MyProperty.Market = "AU"; obj.MyProperty.CreditCard = new List<Multicheckbox>(){ new Multicheckbox { CheckboxName = "Amex", IsChecked = true }, new Multicheckbox { CheckboxName = "Master Card", IsChecked = false }, new Multicheckbox { CheckboxName = "Visa", IsChecked = true } }; obj.MyProperty.DebitCard = new List<Multicheckbox>(){ new Multicheckbox { CheckboxName = "Amex", IsChecked = false }, new Multicheckbox { CheckboxName = "Master Card", IsChecked = true }, new Multicheckbox { CheckboxName = "Visa", IsChecked = false } }; obj.MyProperty.BPay = new List<Multicheckbox>(){ new Multicheckbox { CheckboxName = "Savings Cheque", IsChecked = true }, new Multicheckbox { CheckboxName = "Credit Card", IsChecked = false }, }; return obj; }
And in View
<div> <div> @Html.Label("Debit Card :") </div> @for (int i = 0; i < Model.MyProperty.DebitCard.Count; i++) { <div> <div> @Html.CheckBoxFor(x => x.MyProperty.DebitCard[i].IsChecked) </div> <div> @Model.MyProperty.DebitCard[i].CheckboxName @Html.HiddenFor(x => Model.MyProperty.DebitCard[i].CheckboxName) </div> </div> } @Html.HiddenFor(model => Model.AtleastOneDebitCardSelected) @Html.ValidationMessageFor(model => Model.AtleastOneDebitCardSelected) </div>
这篇关于阴影或通用属性?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文