ToString()方法基于对象返回不同的结果

时间:2016-05-07 19:50:35

标签: c# tostring

我正在开发一个可以创建订阅的应用程序,您可以选择同时属于该类的个人或公司订阅。但是我在覆盖ToString()时遇到了一些麻烦。是否可以使用某种if语句来说明对象是否创建为单个订阅返回为个人格式化的字符串,否则返回公司的字符串。这是我的代码,使其更清晰:

public class Subscription: ObservingClass
{

    private IndividualApplicant _individualApplicant;
    private CompanyApplicant _companyApplicant;
    private SubsAmount _subsAmount;

    public IndividualApplicant IndividualApplicant
    {
        get { return _individualApplicant; }
        set
        {
            _individualApplicant = value;
            OnPropertyChanged();
        }
    }

    public CompanyApplicant CompanyApplicant
    {
        get { return _companyApplicant; }
        set
        {
            _companyApplicant = value;
            OnPropertyChanged();
        }
    }

    public SubsAmount SubsAmount
    {
        get { return _subsAmount; }
        set
        {
            _subsAmount = value;
            OnPropertyChanged();
        }
    }

    public Subscription()
    {
        IndividualApplicant = new IndividualApplicant();
        CompanyApplicant =  new CompanyApplicant();
    }

    public override string ToString()
    {
        return "Subscription Amount: " + SubsAmount + "\n" + IndividualApplicant.ToString();
    }


}

2 个答案:

答案 0 :(得分:2)

你的问题比这更糟糕。

  

可以选择个人或公司订阅,这两个类都是。

这表明了inhertance - 2个类(IndividualSubscription,CompanySubscription) - 然后......问题出在哪里?都会根据需要覆盖Tostring。

但你的班级模型非常糟糕。

  

public CompanyApplicant CompanyApplicant       {           get {return _companyApplicant; }           组           {               _companyApplicant = value;               OnPropertyChanged();           }       }

WTF?这应该是申请人 - 当插入IndivdualApplicant时,CompanySubscription可能会抛出ArgumentExcveption,但是根据子类型,它对于它们具有不同的属性完全没有意义并完全卷入所有逻辑。

答案 1 :(得分:1)

  

创建订阅,您可以   选择两者兼有的个人或公司订阅   类

然后你的Subscription课应该是这样的..

public class Subscription : ObservingClass
{
    private Applicant _applicant;
    public Applicant Applicant
    {
        get
        {
            return _applicant;
        }
        set
        {
            _applicant = value;
            OnPropertyChanged();
        }
    }
    public Subscription(Applicant applicant)
    {
        Applicant = applicant;
    }

    public override string ToString()
    {
        return "Subscription Amount: " + SubsAmount + "\n" + Applicant.ToString();
    }

    private SubsAmount _subsAmount
    public SubsAmount SubsAmount
    {
        get { return _subsAmount; }
        set
        {
            _subsAmount = value;
            OnPropertyChanged();
        }
    }
}

有了这个,Subscription只知道它有一个Applicant abstract类(如果你愿意,可以将其设为interface

现在,IndividualApplicantCompanyApplicant应该继承Applicant

从那里,覆盖ToStringIndividualApplicant

CompanyApplicant
相关问题