public class ImgBuffer<T>
{
public T[] buf;
public int width;
public int height;
public ImgBuffer () {}
public ImgBuffer (int w, int h)
{
buf = new T[w*h];
width = w;
height = h;
}
public void Mirror()
{
ImageTools.Mirror (ref buf, width, height);
}
}
并且ImageTools类在第一个参数上为byte [],short []和Color32 []定义了Mirror。特别是:
public void Mirror(ref Color32[] buf, int width, int height) { ....
但是我得到这个错误:
错误CS1502:ImageTools.Mirror(ref Color32 [],int,int)'的最佳重载方法匹配具有一些无效的参数
我究竟做错了什么?
最佳答案
您似乎希望C#泛型像模板一样。事实并非如此。根据您的描述,似乎有一个ImageTools类,看起来像这样
public class ImageTools
{
public static void Mirror(ref byte[] buf, int width, int height) { }
public static void Mirror(ref Color32[] buf, int width, int height) { }
public static void Mirror(ref short[] buf, int width, int height) { }
}
并且您有一个看起来像这样的ImgBuffer类(缩写)
public class ImgBuffer<T>
{
public T[] buf;
public int width;
public int height;
public void Mirror()
{
ImageTools.Mirror(ref buf, width, height);
}
}
编译器无法在
ImgBuffer.Mirror
中验证对ImageTools.Mirror
的调用是合法的。编译器只知道ref buf
是T[]
类型。 T
可以是任何东西。它可以是字符串,整数,日期时间,Foo等。编译器无法验证参数是否正确,因此您的代码是非法的。这是合法的,但是我觉得您对3种所需类型的Mirror方法都有特定的实现,因此可能不可行。
public class ImageTools<T>
{
public static void Mirror(ref T[] buf, int width, int height) { }
}