2014-04-28 3 views
0

정수 값에 대해 내 LargeWholeNumber 클래스를 사용하고 있습니다. System.Math 클래스에는 적용 가능한 유형에 대해 여러 개의 Max 메소드가 있습니다. LargeWholeNumber 인스턴스를 비교하는이 Max 메서드에 대한 오버로드를 생성 할 수 있습니까? 시스템 메서드에 과부하를 생성 할 수 있습니까?

나는 System.Math에서 상속 내 자신의 Math 클래스를 생성했지만, 그것은 "Cannot inherit from sealed class 'Math'"을 말한다.

미리 조언 해 주셔서 감사합니다.

+0

이 확장 방법을 사용하는 것이 좋습니다 [왜 정적 클래스를 상속 할 수 없습니다를?] (http://stackoverflow.com/questions/774181/ why-cant-i-inherit-static-classes) –

+0

@huMptyduMpty http://stackoverflow.com/questions/774181/why-cant-i-inherit-static-classes – serdar

답변

1

아니요, 기본적으로. 인스턴스의 경우 메서드의 경우 확장 메서드를 사용하여 새로운 의사 오버로드를 추가 할 수 있습니다. 정적 메서드에는 사용할 수 없습니다.

0

봉쇄 된 클래스를 상속받을 수 없습니다. 문제를 해결하는 가장 좋은 방법은 직접 수학 클래스를 작성하거나 확장 방법을 사용하는 것입니다.

void Main() 
    { 
     var a = new LargeWholeNumber{Number = 2}; 
     var b = new LargeWholeNumber{Number = 3}; 

     var bigger = a.Max(b); 
     var bigger2 = ExtMethods.Max(a,b); 
    } 


    public class LargeWholeNumber 
    { 
     public int Number {get;set;} 
    } 


    public static class ExtMethods 
    { 
     public static LargeWholeNumber Max(this LargeWholeNumber inNumber, 
LargeWholeNumber secondNumber) 
     { 
      if(inNumber.Number >= secondNumber.Number) 
       return inNumber; 
      else 
       return secondNumber; 
     } 

    } 
2

가상 또는 정적 메서드를 재정의 할 수 없습니다. 오버라이드 된 기본 메소드는 가상, 추상 또는 대체 여야합니다. 여기에서

참조 : 시스템 방법은 가상 경우

http://msdn.microsoft.com/en-us/library/ebca9ah3.aspx 그래서, 당신이 그것을 대체 할 수 있습니다. 그렇지 않다면 그럴 수 없습니다. 당신이 시스템 방식이 아닌 가상이다 오버라이드 (override) 할 경우

, 난 당신이

+0

질문이 '오버라이드'가 아니 었습니다. 그것은 과부하 *였습니다. 이것은 매우 다르며'virtual' /'abstract' /'override'와 관련이 없습니다. 나는 완전히 다른 질문에 공정한 대답을했다고 생각합니다. –

관련 문제