阴影或通用属性? [英] shadowing or generic properties?

查看:64
本文介绍了阴影或通用属性?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

嗨朋友们,

我有两个班级 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屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆