2015-03-19 7 views
0

У меня есть 2 класса. Мой вопрос: как я могу вызвать ToString из первого класса под названием Racer в моем втором классе под названием «Время».C# Вызов ToString в классе ToString в другом классе

Упрощенная версия: класс B Для строки (возврат класса А 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

Ваш 'Time' должен хранить экземпляр« Racer »где-то. 'ToString' может быть вызван на конкретный экземпляр (он не является статическим). –

+0

Что вы ожидаете от 'string s = Racer.ToString' выполнить? – bokibeg

+1

Вам нужен объект Racer (один экземпляр класса Racer). Вы должны сохранить это как член в классе Time. –

ответ

0

Edit: это, вероятно, ближе к тому, что вы намерены:

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, включающий время гонки, а также имя гонщика.

+0

И как я могу это сделать, не объявляя гонщика частного экземпляра? Я объявил это в классе Racer и назвал i Main до класса времени Или я просто глуп и не понимаю, что вы имеете в виду, это вариант. Но все равно спасибо! – semmtex

+0

Редактировать исходное сообщение, чтобы включить код для Main. – Polyfun

1

Поскольку ToString() не является статическим, вы не можете вызвать Racer.ToString().

Вы должны создать объект Racer, а затем называть ToString().

+0

Наконец-то получил! Thanx :) – semmtex

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 будет автоматически обновлять себя, когда вы вводите новые поля в классе.

Смежные вопросы