전화

2016-10-19 3 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의 모든 클래스를 따라) inherites부터 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)