좀 더 직관적이지만 약간의 중복성이 필요한 대체 솔루션을 원한다면 방금 시도해 볼 수 있습니다. 여기서 이점은 완전히 typesafe하다는 것입니다.
다음은 int 및 float에 대해 + 및 - 연산을 구현하는 빠른 버전입니다. 더 많은 연산을 포함하고 더 많은 기본 유형 (2 진수, 10 진수 등)을 지원하거나 사용자 정의 유형까지 지원하는 것은 자명합니다. GenericMath를 필요한 것으로 바꾸십시오.
class Program
{
static void Main(string[] args)
{
var gsInt = new GenericMath<int,IntOperators>();
var gsFloat = new GenericMath<float,FloatOperators>();
var intX = gsInt.Sum(2, 3);
var floatX = gsFloat.Sum(2.4f, 3.11f);
}
}
interface IOperators<T>
{
T Sum(T a, T b);
T Difference(T a, T b);
}
sealed class IntOperators : IOperators<int>
{
public int Sum(int a, int b) { return a + b; }
public int Difference(int a, int b) { return a - b; }
}
sealed class FloatOperators : IOperators<float>
{
public float Sum(float a, float b) { return a + b; }
public float Difference(float a, float b) { return a + b; }
}
class GenericMath<T,Y>
where Y : IOperators<T>, new()
{
private readonly static Y Ops = new Y();
public T Sum(T a, T b)
{
return Ops.Sum(a, b);
}
public T Difference(T a, T b)
{
return Ops.Difference(a, b);
}
}
제네릭의 현재 구현에서 실망스러운 제한 사항입니다. Marc의 구현은 문제를 다룰 때 가장 잘 보았습니다. 이에 관련된 connect.microsoft.com에 대한 몇 가지 지원 문서가 있습니다. http://connect.microsoft.com/VisualStudio/feedback/ViewFeedback.aspx?Feedback=94264 및 여기에서 찾을 수 있습니다. http://connect.microsoft.com/VisualStudio/feedback/ViewFeedback.aspx?FeedbackID= 325177 및 여기 : http://connect.microsoft.com/VisualStudio/feedback/ViewFeedback.aspx?FeedbackID=338861. – LBushkin
동적 예제를 사용하려고 했습니까? –
Doh - 고마워, 고정 :) –