2015-03-19 87 views
0

我有2个类。我的问题是,我怎样才能从名为Racer的第一个类中调用ToString,在我的第二个类中称为Time。C#在其他类中通过ToString在类中调用ToString

简体版:B类为String(回报A类的ToString +东西从B类)

class Racer 
{ 
    public string name, surname; 


    public void ReadingSeparatorsRacer(string line) //Rozdělení separatorem 
    { 

     char[] separators = new char[] { ';' }; 
     string[] field = line.Split(separators, StringSplitOptions.RemoveEmptyEntries); 

     surname = field[0]; //Příjmení 
     name = field[1]; //Jméno 
    } 

    public override string ToString() 
    { 
     return surname + name; 
    }   
} 

class Time 
{ 
    DateTime startTime, finishTime, result; 

    public void ReadingSeparatorsTime(string line) 
    { 
     char[] separators = new char[] { ';', ':', '.' }; 
     string[] field = line.Split(separators, StringSplitOptions.RemoveEmptyEntries); 
    } 

    public override string ToString() 
    { 
     string s = Racer.ToString 

     return "" result; 

    } 
} 

荫想是这样的:

public override ToString() 
{ 
return Racer.ToString + result; 
} 

但可悲的是,这并不工作:(

任何想法?

感谢您的帮助

+0

你的'时间'必须在某处存储'Racer'实例。 'ToString'可以在具体实例上调用(它不是静态的)。 – 2015-03-19 10:59:30

+0

你期待'string s = Racer.ToString'完成什么? – bokibeg 2015-03-19 10:59:32

+1

您需要有Racer对象(类Racer的单个实例)。您应该将其存储为类Time中的成员。 – 2015-03-19 10:59:55

回答

0

编辑:这可能更接近您打算什么:

class Racer 
{ 
    public string name, surname; 
    public Time Time { get; set; } 

    public override string ToString() 
    { 
     return surname + name + "(" + Time.ToString() + ")"; 
    }   
} 

class Time 
{ 
    DateTime startTime, finishTime, result; 

    public override string ToString() 
    { 
     TimeSpan elapsedTime = finishTime - startTime; 
     return elapsedTime.ToString(); 
    } 
} 

每个赛车手是代表他们花了多长时间运行的种族时间属性。 Racer.ToString方法调用Time.ToString方法以包含比赛时间以及Racer的名字。

+0

如何在不声明私有实例赛车的情况下做到这一点?我在类Racer中声明了它,并且在Time类之前调用​​了Main。 或者我只是愚蠢,并不明白你的意思,那也是一个选项。不过谢谢! – semmtex 2015-03-19 11:23:55

+0

编辑您的原始文章以包含Main的代码。 – Polyfun 2015-03-19 11:30:31

1

由于ToString()不是静态的,所以不能调用Racer.ToString()。

你必须实例化一个Racer对象然后调用ToString()就可以了。

+0

终于明白了!谢谢:) – semmtex 2015-03-19 12:07:00

0

一般来说,获得自我维护的ToString方法的最简单方法就是使用一个库。例如。从https://github.com/kbilsted/StatePrinter/blob/master/doc/AutomatingToStrings.md

class AClassWithToString 
{ 
    string B = "hello"; 
    int[] C = {5,4,3,2,1}; 

    // Nice stuff ahead! 
    static readonly Stateprinter printer = new Stateprinter(); 

    public override string ToString() 
    { 
    return printer.PrintObject(this); 
    } 
} 

通知如何当你介绍新的领域进级的ToString会自动更新。