2016-10-19 5 views
2

Рассмотрим следующий код:Обратиться в перегрузкой метод расширения в классе

class Program 
{ 
    static void Main(string[] args) 
    { 
     var t = new Test(); 
     t.ToString(); 

     Console.WriteLine(t.ToString()); 
     Console.ReadKey(); 
    } 
} 

public class Test 
{ 

} 

public static class TestHelper 
{ 
    public static string ToString(this Test test) 
    { 
     return "HashValue of test instance: " + test.GetHashCode(); 
    } 
} 

Как я могу просто назвать свою перегружать (по крайней мере VS говорит мне, что ToString() имеет +1 overload) метод расширения? Начиная с Test наследует (по всем классам в .NET Framework afaik) от object. Класс object имеет расширение ToString(), которое возвращает что-то вроде <namespace-wher-the-class-is-locatet.<class-name>. Но что делать, если я хочу ToString() моей собственной реализации, которая не принимает других параметров?

И НЕТ, я не хочу реализовывать ToString() внутри моего класса. Я хочу сделать это как метод расширения. (Как расширение для SecureString, чтобы преобразовать его из неуправляемого, зашифрованного в управляемое, дешифрованное)

Заранее спасибо!

+1

Я не вижу смысла в этом .. может кто-нибудь объяснить, как это может быть полезно? – Sebi

+0

Как я писал: например, как расширение для ** System.Securety.SecureString **, чтобы преобразовать его обратно в читаемую строку? – Radinator

ответ

3

Вы должны позвонить ему напрямую, и вы не можете его изменить, потому что разрешение метода выбирает элемент экземпляра по методу расширения.

TestHelper.ToString(t) 
Смежные вопросы