Wil*_*Wil 4 c# generics syntax
我(尝试)了解仿制药,我认为我理解它们.我有以下泛型类的代码:
/// <summary>
/// generics
/// </summary>
class Point<T> where T : IConvertible
{
public T X;
NumberFormatInfo nf = NumberFormatInfo.CurrentInfo;
public double Subtract(Point<T> pt)
{
return (X.ToDouble(nf) + pt.X.ToDouble(nf));
}
}
Run Code Online (Sandbox Code Playgroud)
在Main(),我可以创建对象罚款:
Point<int> pt = new Point<int>();
Point<double> pt2 = new Point<double>();
Point<string> pt3 = new Point<string>();
pt.X = 10;
pt2.X = 10;
pt3.X = "10";
Run Code Online (Sandbox Code Playgroud)
现在,我可以Subtract在两个ints,doubles甚至strings 上运行Method ,但我不能运行混合,我认为我可以因为.ToDouble转换而运行.
如果我尝试运行,Console.WriteLine(pt.Subtract(pt2));我会收到以下错误:
Error 1 The best overloaded method match for Date.Point<int>.Subtract(Date.Point<int>)' has some invalid arguments
Error 2 Argument 1: cannot convert from 'Date.Point<double>' to 'Date.Point<int>'
Run Code Online (Sandbox Code Playgroud)
代码本身并不是那么重要,因为我只是想了解/学习泛型,所以我只想了解这里有什么问题以及为什么它不起作用......实际的方法并不重要/不会使用.
你的Subtract方法需要一个Point<T>.
T这是类的类型参数,这意味着它只能采用Point相同的类型.
您需要提供Subtract一个单独的通用参数,以便它可以取Point<U>任何一个U.