CS0120 Для нестатического поля, метода или свойства "Robot.PrintValues()" требуется ссылка на объект
начал обучаться языку, и столкнулся с такой проблемой. Повторяю код полностью за человеком на видео, но при этом возникает ошибка: CS0120 Для нестатического поля, метода или свойства "Robot.PrintValues()" требуется ссылка на объект.
Стоит поставить параметр static, все пропадает, но так как я изучаю виртуальный метод, это решение не представляется возможным. При этом у "преподавателя" работает все, а у меня ничего.
Пытался искать ошибку в Metanit.net, там я не нашел (или не понял). Искал ошибку в Microsoft: Решения, которые он мне предлагает не помогают. Плюс в силу неопытности, я просто не понимаю, что от меня требует программа: Какая ссылка? Какие аргументы? Началось это с обучения классов, но сейчас заставила врасплох. Пожалуйста объясните
Код:
'''
using System;
using System.Collections.Generic;
using System.Linq;
using System.Runtime.CompilerServices;
using System.Security.AccessControl;
using System.Text;
using System.Threading.Tasks;
namespace ConstructsClasses
{
internal class Program
{
public static void Main()
{
Robot Boba = new Robot("Boba", 100, new byte[] { 5, 7, 10 });
Boba.name = "Boba";
Boba.weight = 100;
Boba.coordinates = new byte[] { 5, 7, 10 };
Console.WriteLine("Имя: {0} \nВес: {1} \nКоординаты: ", Boba.name, Boba.weight);
foreach (byte b in Boba.coordinates) Console.Write("{0} ", b);
Killer Biba = new Killer("Biba", 120, new byte[] { 10, 6, 8 }, 100);
Biba.name = "Biba";
Biba.weight = 120;
Biba.coordinates = new byte[] { 10, 6, 8 };
Biba.Health = 100;
Console.WriteLine("Имя: {0} \nВес: {1} \nКоординаты: ", Biba.name, Biba.weight);
foreach (byte b in Biba.coordinates) Console.Write("{0} ", b);
Killer.Laser();
Robot Bot = new Robot();
Bot.name = "Bot";
Bot.Weight = Convert.ToInt32(Console.ReadLine());
Bot.coordinates = new byte[] { 0, 0, 0 };
Console.WriteLine("Имя: {0} \nВес: {1} \nКоординаты: ", Bot.name, Bot.weight);
foreach (byte b in Bot.coordinates) Console.Write("{0} ", b);
//Массив объектов (Классов)
List<Killer> robots = new List<Killer>();
robots.Add(new Killer("Alex", 400, new byte[] { 10, 0, 0 }, 100));
robots.Add(new Killer("Bob", 200, new byte[] { 0, 10, 0 }, 100));
robots.Add(new Killer("Kenny", 600, new byte[] { 0, 0, 10 }, 100));
robots.Add(new Killer("Cartman", 1000, new byte[] { 0, 20, 0 }, 100));
Robot newRobot = new Robot();
foreach (Killer obj in robots)
{ if (obj.Name == "Kenny")
{ newRobot = obj as Robot; }
Console.WriteLine(obj.Name);
Robot.PrintValues(); //<--- Ошибка CS0120!!!
}
}
}
//Классы
internal class Robot
{
public string? name;
public int weight;
public byte[]? coordinates;
protected string? surname;
public int Weight
{ get {return this.weight;}
set { if (value < 1) this.weight = 1; else this.weight = value; }
}
public int Width{ get; set; }
public string Name { get { return this.name; } private set { } }
public Robot(string? name, int weight, byte[] coordinates)
{ Console.WriteLine("Object has been created!");
SetValues(name, weight, coordinates);
}
public Robot()
{
}
public void SetValues(string? name, int weight, byte[] coordinates)
{
this.name = name;
this.weight = weight;
this.coordinates = coordinates;
}
public static void Print () { Console.WriteLine("Buba"); }
public virtual void PrintValues() {
Console.WriteLine("Bimba");} //<--- Виртуальный метод
}
//Дочерний класс
class Killer : Robot
{ public int Health { get; set;}
public static void Laser()
{
Console.WriteLine("Laser shooting!!!!");
}
public Killer(string? name, int weight, byte[] coordinates, int health) : base (name, weight, coordinates)
{
this.Health = health;
Robot.Print();
this.surname = name;
}
public override void PrintValues()
{
base.PrintValues();
Console.WriteLine("Health: " + this.Health);
}
}
}
'''