c#中的静态字段问题(错误CS0120)

Static field problem (error CS0120) in c#

我必须为我的函数 DajGlos() 编写一个覆盖函数,但我返回错误 CS0120(非静态字段、方法或 属性 需要对象引用)。我该如何解决这个问题?

我的代码:

 static void Main(string[] args)
        {
            Pies pies = new Pies("Reksio", "ssaki", "lądowe", 50);

            Pies.Przedstaw("Reksio", "ssaki", "lądowe");
            Pies.DajGlos();
        }

    abstract class Zwierze
    {
        private static string Rodzina { get; set; }
        private static string Grupa { get; set; }
        private static string Imie { get; set; }

        public static void Przedstaw(string Imie, string Rodzina, string Grupa)
        {
            Console.WriteLine("Jestem " + Imie + ", rodzina: " + Rodzina + ", grupa: " + Grupa);
        }

        public abstract void DajGlos();

    }

    class Pies : Zwierze
    {
        public Pies(string Imie, string Rodzina, string Grupa, int dlugoscOgona)
        {
            
        }
        int dlugoscOgona;

        public override void DajGlos()
        {
            Console.WriteLine("Bark!");
        }
    }```

DajGlos 是一个实例方法,因此正如错误消息所说,您需要在特定实例(在您的情况下 - pies)上调用它,而不是在 class 本身。即:

Pies pies = new Pies("Reksio", "ssaki", "lądowe", 50);
Pies.Przedstaw("Reksio", "ssaki", "lądowe");
pies.DajGlos(); // Here!

ClassName.StaticMethodName(...) 用于访问静态方法。
ObjectName.NonStaticMethodName(...) 用于访问非静态方法。
Pies.DajGlos(); 行是 ClassName.NonStaticMethodName(...),这是不允许的。
我猜你想做的是:pies.DajGlos();.