关键字“this”在静态属性,静态方法或静态字段初始值设定项中无效

时间:2015-07-12 06:42:35

标签: c# this

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

出了什么问题,如何解决这个问题?

4 个答案:

答案 0 :(得分:1)

&#39;这&#39;仅在对象的上下文中有意义,并且不能在静态代码中使用。如果你需要参考这个&#39;设置字段的起始值时,请在构造函数中设置该值。

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

答案 1 :(得分:1)

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

答案 2 :(得分:1)

您的main方法是静态的,因此您无法拨打this. 相反,你可以写:

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

答案 3 :(得分:1)

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