2015-07-12 111 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」。

相關問題