2015-03-05 3 views
-4

У меня есть метод, который возвращает объект. Если я верну объект, он даст полное имя класса. Но я хочу вернуть элементы данных объекта.Как переопределить ToString() Метод получения данных Член объекта

public GetDetails GetInfo() 
{ 
    GetDetails detail = new GetDetails("john", 47); 
    return detail; 
} 

public override string ToString() 
{ 
    return this.Name + "|" + this.Age; 
} 

Я переопределить метод ToString(), чтобы получить элемент данных detail объекта. Но это не работает. Как я могу это достичь?

+0

Вы должны быть более конкретными. Возвращение объекта возвращает именно этот объект. 'ToString' просто изменяет * строковое представление * этого объекта. – BradleyDotNET

+0

'Если я верну объект, то он даст полное имя класса ', либо возвращает' object' или 'string'. Как правило, полное имя типа означает, что в 'ToString()' ничего нет смысла ' – Plutonix

+0

Вы спрашиваете, что в '' ToString() 'override вы хотели бы получить доступ к членам (свойствам?) Переменной' detail', которые у вас есть? локально объявляется в 'GetInfo()'? –

ответ

0

Вы можете создать метод расширения строк.

public static string StringExtension(this GetDetails input) 
{ 
    return input.Name + "|" + input.Age; 
} 

Этот статический метод обычно находится в статическом классе. Тогда вы могли бы назвать это как этот

public string GetInfo() 
{ 
    GetDetails detail = new GetDetails("john", 47); 
    return detail.ToString(); 
} 
1

Что вы просите не работает, потому что detail является частной переменной и в рамках метода GetInfo(). Поэтому он недоступен извне этого метода.

Трудно догадаться, каков контекст этих двух методов; однако я предполагаю, что вы должны сохранить состояние в своем классе, чтобы позволить detail визуализироваться в методе ToString().

Этот пример не может быть идеальным решением, но это будет исправить проблему:

class MySpecialDetails 
{ 
    // declare as private variable in scope of class 
    // hence it can be accessed by all methods in this class 
    private GetDetails _details; // don't name your type "Get..." ;-) 

    public GetDetails GetInfo() 
    { 
     // save result into local variable 
     return (_details = new GetDetails("john", 47)); 
    } 

    public override string ToString() 
    { 
     // read local variable 
     return _details != null ? _details.Name + "|" + _details.Age : base.ToString(); 
    } 
} 
Смежные вопросы