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
在两个int
s,double
s甚至string
s 上运行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
.
归档时间: |
|
查看次数: |
136 次 |
最近记录: |