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;
}
答案 0 :(得分:0)
如果您想一般Abs
,您可以创建一个界面并为double
和int
实施,例如:
public interface IAbsNum<T>
{
T Abs(T num);
}
public class IntAbsNum : IAbsNum<int>
{
public int Abs(int num) { return Math.Abs(num); }
}
答案 1 :(得分:0)
将Math.Abs
包装到泛型函数中并不是一种干净的方法,因为1)该函数不是通用的,而是针对每种数字类型设计为overloads,以及2)创建.NET 1 中无法使用数字类型的通用约束。
即使您这样做了,您仍然需要使用巨大的switch
语句来调用正确的Math.Abs
重载。
我认为作为初学者我会找到一个不同的问题 - 这个问题不是一个简单的学习练习。
1 你可以通过将参数约束到struct, IComparable, IFormattable
来近距离接触,但它并没有真正为你买单,因为你必须施展到使用任何运算符或框架数学函数。