2015-07-12 73 views
0
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'在静态属性,静态方法或静态字段初始值设定项中无效。

怎么回事,我该如何解决这个问题?

回答

1

main方法是静态的,所以你不能叫this. 相反,你可以写:

Stream s1 = Assembly.GetExecutingAssembly().GetManifestResourceStream("WindowsApplication1.sudhir.jpg"); 
1

'this'仅在对象的上下文中才有意义,并且不能在静态代码中使用。如果在设置字段的起始值时需要引用“this”,请在构造函数中设置该值。

错误信息会告诉你哪一行文件导致问题。我不认为这是你向我们展示过的任何线条。

1

该关键字只有在您使用对象(我指的是insances)的情况下才有效。当你使用静态方法时,这意味着你不需要处理一个特定的对象,而是处理一个类,因为“this”不指向任何东西。

1

“这”是一个指向类的当前实例一种无形的参数。由于您将方法声明为静态方法,因此您无法访问它。这不仅仅在C#中。 C++也有“this”。

相关问题