2014-11-03 2 views
-3
static void Main(string[] args) 
{ 
    AbsValue<int> ABS = new AbsValue<int>(); 
    AbsValue<double> ABSdouble = new AbsValue<double>(); 

     ABS.X = -5; 
     ABSdouble.X = 65.3; 

    Console.WriteLine("Integer absolute value: {0}", Math.Abs(ABS.X)); 
    Console.WriteLine("Double absolute value: {0}", Math.Abs(ABSdouble.X)); 

    Console.ReadLine(); 

    } 
} 

정확하게는 생각하지 않지만 작동하는 것 같습니다. 좀 더 조언을 해줄 수 있니?일반 클래스를 사용하여 숫자의 절대 값을 계산하십시오.

class AbsValue<T> 
{ 
    public T X; 
} 
+2

아니, 그게 전부다. 절대 가치를 얻는 접근 방식에있어 잘못된 점은 무엇이라고 생각하십니까? – BradleyDotNET

+0

'AbsValue' 클래스 안에'Math.Abs'에 대한 호출을 포함시켜야합니다. –

+1

@ ArturoTorresSánchez 어떻게? 'Math.Abs'는 일반적인 것이 아닙니다. –

답변

0

일반적인 기능으로 Math.Abs을 감싸는 깨끗한 방법이 아니라, 일을하기 때문에)이 함수는 generic이 아니며 대신 각 숫자 유형에 대해 overloads으로 디자인하고 2) 숫자 유형에 대한 일반적인 제한은 .NET 에서는 불가능합니다.

그래도 그랬다면 Math.Abs 오버로드를 호출하기 위해 여전히 거대한 switch 문이 있어야합니다.

저는 초보자로서 해결해야 할 다른 문제를 발견 할 것입니다. 이것은 쉬운 학습 운동이 아닙니다.


1 당신은 struct, IComparable, IFormattable에 매개 변수를 제한함으로써 가까이 갈 수 있지만, 어떤 사업자 또는 프레임 워크 수학 함수를 사용하는 캐스팅해야 할 것 같은 정말 많이 구입하지 않습니다.

+0

'string'은'struct' 제약 조건을 만족하지 않습니다. – Servy

+0

@Servy 감사합니다 - 임시 광기, 나는 가치 유형을 생각하고있었습니다. –

0

당신이 Abs을 수행 할 경우 일반적으로 사용자가 인터페이스를 생성하고 doubleint을 위해 그것을 구현할 수 있습니다 예 :

public interface IAbsNum<T> 
{ 
    T Abs(T num); 
} 

public class IntAbsNum : IAbsNum<int> 
{ 
    public int Abs(int num) { return Math.Abs(num); } 
} 
관련 문제