首页 > 解决方案 > c#中的静态字段问题(错误CS0120)

问题描述

我必须为我的函数 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!");
        }
    }```

标签: c#overriding

解决方案


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

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

推荐阅读