2010-11-19 7 views
5

System.Net.Mime.MediaTypeNames.Image과 같은 정적 클래스를 확장하기 위해 확장 메서드 나 다른 기법을 사용할 수 있는지 궁금합니다.확장 메서드를 사용하여 정적 클래스를 확장

+0

정적 클래스는 확장 할 수 없습니다. 이 질문의 중복을 검색하면 몇 가지 해결 방법이 표시됩니다. – BeemerGuy

+0

왜 그걸 필요로할까요? 정적 클래스에는 컨텍스트가 없으며 정적 클래스 내부에서 수행 할 수있는 모든 작업은 코드의 다른 위치에서 수행 할 수 있습니다. –

+0

@Amby - 나는 당신이 조직의 전문가만을 위해 그것을하고 싶어 할지도 모른다고 생각합니다. 물론 필요한 방법으로 정적 ImageUtility 클래스를 만들 수 있습니다 (이 대답에 따라 그는 어떻게 든해야 할 것입니다).하지만 OP가 추가 클래스가 필요없는 방식으로 코드를 구성하려고합니다. . 불행히도, 당신은 할 수 없습니다. (나는 똑같이하기 위해 여기에왔다). – MattW

답변

6

아니요, 확장 메서드는 정적 메서드 (또는 속성)가 아닌 인스턴스 메서드를 추가하는 데만 사용할 수 있습니다. 확장 메서드는 실제로 정적 메서드 주위의 구문 설탕입니다. 당신은 카운트()로 확장 메서드를 사용할 때 예를 들어, :

var list = GetList(); 
var size = list.Count(); 

이 실제로으로 컴파일 :

var list = GetList(); 
var size = Enumerable.Count(list); 

당신은 확장 방법을 사용하여 기존 클래스에 추가 정적 메서드를 추가 할 수 없습니다 .

+0

"확장 메서드는 인스턴스 메서드 만 추가하는 데 사용할 수 있습니다"라고 말하는 것이 맞습니까? 당신이 설명 할 때, 그들은 단지 인스턴스 메소드 인 것처럼 보입니다. 실제로 인스턴스 메소드가 아니거나 클래스의 비공개 멤버에 액세스 할 수 있습니다. –

0

아니요, C#에서는 아직 가능하지 않습니다.하지만 언젠가는 그렇게 될 것입니다. 그리고 정적 클래스는 서브 클래스 object에서 파생되어야하므로 정적 클래스를 서브 클래스로 만들거나 새 메서드를 추가 할 수 없습니다. 코드에서 꽤 비슷한 효과를내는 한 가지 방법은 확장 메서드가 필요할 때 대신 사용할 다른 정적 클래스를 선언하는 것입니다. 예를 들어 일본어 클래스는 정적이기 때문에

public static class MessageBox2 
{ 
    public static DialogResult ShowError(string Caption, string Message, params object[] OptionalFormatArgs) 
    { 
     return MessageBox.Show(string.Format(Message, OptionalFormatArgs), Caption, MessageBoxButtons.OK, MessageBoxIcon.Error); 
    } 
} 

정의에 의해 "확장자"방법은 this 파라미터로 인스턴스를 수신 할 필요가없고, 단순히 원본 클래스의 정적 메소드를 사용할 수있다.

관련 문제