关键字“这个”是不是一个静态属性,静态方法或静态字段初始
问题描述:
public static void Main()
{
Stream s1 = this.GetType().Assembly.GetManifestResourceStream("WindowsApplication1.sudhir.jpg");
Stream s2 = this.GetType().Assembly.GetManifestResourceStream("WindowsApplication1.sunil.jpg");
Bitmap img1 = new Bitmap(s1);
Bitmap img2 = new Bitmap(s2);
if (img1.Size != img2.Size)
{
Console.Error.WriteLine("Images are of different sizes");
return;
}
float diff = 0;
for (int y = 0; y < img1.Height; y++)
{
for (int x = 0; x < img1.Width; x++)
{
diff += (float)Math.Abs(img1.GetPixel(x, y).R - img2.GetPixel(x, y).R)/255;
diff += (float)Math.Abs(img1.GetPixel(x, y).G - img2.GetPixel(x, y).G)/255;
diff += (float)Math.Abs(img1.GetPixel(x, y).B - img2.GetPixel(x, y).B)/255;
}
}
Console.WriteLine("diff: {0} %", 100 * diff/(img1.Width * img1.Height * 3));
在这里,我尝试匹配两个图像,并发现它们的区别有效的,但我得到这个错误关键字“这个”是不是一个静态属性,静态方法或静态字段初始
关键字'this'在静态属性,静态方法或静态字段初始值设定项中无效。
怎么回事,我该如何解决这个问题?
答
你main
方法是静态的,所以你不能叫this.
相反,你可以写:
Stream s1 = Assembly.GetExecutingAssembly().GetManifestResourceStream("WindowsApplication1.sudhir.jpg");
答
'this'仅在对象的上下文中才有意义,并且不能在静态代码中使用。如果在设置字段的起始值时需要引用“this”,请在构造函数中设置该值。
错误信息会告诉你哪一行文件导致问题。我不认为这是你向我们展示过的任何线条。
答
该关键字只有在您使用对象(我指的是insances)的情况下才有效。当你使用静态方法时,这意味着你不需要处理一个特定的对象,而是处理一个类,因为“this”不指向任何东西。
答
“这”是一个指向类的当前实例一种无形的参数。由于您将方法声明为静态方法,因此您无法访问它。这不仅仅在C#中。 C++也有“this”。