bouya98 Ответов: 4

C# для автомобилей класса оборудования не может получить методы для работы


Для объекта Car вы должны иметь возможность указать модель года с помощью метода set и вызвать Модель года с помощью метода get. Автомобиль должен иметь два состояния "автомобиль за рулем" и "автомобиль неподвижен", которые можно прочитать с помощью метода status (). Изначально автомобиль имеет состояние "остановки", но оно меняется, если вы вызываете метод start (). Вы можете остановить автомобиль с помощью метода stop (), а затем, конечно же, изменить статус на "stand still.

В консоли должно получиться что-то вроде " Теперь купили мне машину модели 2017 года
Машина стоит неподвижно
Пытаюсь завести машину
Надо проверить, если вы начали ... Машина уже едет
Пытается получить остановку на машине
Посмотрим, удастся ли мне остановить его тоже ... Машина стоит неподвижно "

Так что в принципе код вроде бы готов, но я не знаю, почему он не работает... у меня есть год получения/набора для работы, но я не знаю, как получить статус, начать и прекратить работу.

Кто-нибудь поможет? :)

Что я уже пробовал:

 using System;
using System.Collections.Generic;
using System.Text;
using Bilen;
namespace Car
{
    class Program
    {
        static void Main(string[] args)

        {
            Bil theCar = new Bil();
            theCar.Color = "red";
            theCar.License = "bob1337";
            theCar.Make = "Ferrari";

            Console.WriteLine(theCar.Color);
            Console.WriteLine(theCar.License);
            Console.WriteLine(theCar.Make);

            Console.ReadLine();
            Console.ReadLine();
            Console.ReadLine();


            theCar.setYear(2017);
            Console.WriteLine("Got my self a car of  " + theCar.getYear() + " Year model");
            Console.WriteLine(theCar.status());
            Console.WriteLine("Trying to start the car..");
            theCar.Start();
            Console.WriteLine("Need to check if you started..." + theCar.status());
            Console.WriteLine("Trying to stop the car..");
            theCar.stop();
            Console.WriteLine("Lets see if the car stopped... " + theCar.status());
            Console.ReadKey();


        }
    }
    class Bil
    {


        public string Make { get; set; }        
        public string License { get; set; }
        public string Color { get; set; }

        private int year;
        private string status = "Car is not moving";
        public static void Start()
        {
            status = "Car is moving";
        }
        public static string status()
        {
            return status;
        }
        public static void stop()
        {
            status = "Car is not moving";
        }
      
        public void setYear(int arg)
        {
            Year = arg;
        }
        public int getYear()
        {
            return Year;
        }
    }
}


 Errors i get = 

Severity Code Description Project File Line Suppression State Suppression State
Error CS1656 Cannot assign to 'status' because it is a 'method group' Car 61 Active
Error CS0102 The type 'Bil' already contains a definition for 'status' Car 55 Active
Error CS0176 Member 'Bil.status()' cannot be accessed with an instance reference; qualify it with a type name instead Car 28 Active
Error CS0176 Member 'Bil.Start()' cannot be accessed with an instance reference; qualify it with a type name instead Car 30 Active
Error CS0176 Member 'Bil.status()' cannot be accessed with an instance reference; qualify it with a type name instead Car 31 Active
Error CS0176 Member 'Bil.stop()' cannot be accessed with an instance reference; qualify it with a type name instead Car 33 Active
Error CS0176 Member 'Bil.status()' cannot be accessed with an instance reference; qualify it with a type name instead Car 34 Active
Error CS1656 Cannot assign to 'status' because it is a 'method group' Car 53 Active
Error CS0428 Cannot convert method group 'status' to non-delegate type 'string'. Did you intend to invoke the method? Car 57

4 Ответов

Рейтинг:
2

OriginalGriff

Вам нужно вернуться к началу вашего курса и прочитать его снова.
Когда вы объявляете метод с помощью static ключевое слово, это означает, что оно не является свойством экземпляра Car, это свойство класса Car: оно является общим для всех экземпляров и не нуждается в экземпляре для использования.

Например, с реальным автомобилем: "какого он цвета?" - это вопрос, который работает только в том случае, если вы задаете его о конкретном автомобиле: "какого цвета моя машина?", "какого цвета ваша машина?", "какого цвета эта машина?", "какого цвета эта машина?". Вы не можете спросить: "Какого цвета автомобиль?" потому что все автомобили не одного цвета - вам нужен экземпляр, чтобы задать этот вопрос:

public class Car
   {
   public Color GetColour() { ... }
   ...
   }

Car myCar = new Car("Mercedes A Class", "VIN: XXXXXXXXXXXX");
Console.WriteLine(myCar.GetColour());
С другой стороны, вы можете спросить: "сколько колес у автомобиля?" и ожидать, что в результате получите "4", потому что все автомобили имеют четыре колеса (если бы у них было два, они были бы мотоциклом!). "Количество колес" является свойством класса car, а не свойством экземпляра car, и как таковое может быть статичным:
public class Car
   {
   public Color GetColour() { ... }
   public static int GetWheelsCount() { return 4; }
   ...
   }

Car myCar = new Car("Mercedes A Class", "VIN: XXXXXXXXXXXX");
Console.WriteLine(myCar.GetColour());
Console.WriteLine(Car.GetWheelsCount());

Один static метод не может получить доступ к чему - либо, связанному с конкретным экземпляром автомобиля, потому что он универсален для всех объектов автомобиля-в результате вы не можете получить доступ к нему через экземпляр автомобиля, как вы можете получить цвет, чтобы "напомнить вам", что он не имеет никакого отношения к этому экземпляру.

Таким образом, вам нужно пройти через ваши поля и методы и решить, какие из них специфичны для конкретного автомобиля, а какие являются общими для всего класса, и удалить static ключевое слово из связанных с экземпляром.

В этом есть смысл?


bouya98

Вообще-то это имеет смысл!

Рейтинг:
14

Rajeev Panday

i am not sure why you kep start and stop as static, if you are keeping those method static then it can be access directly via class not by object. but i see you have an object created so make sure you access start and stop, set year all via object. set and get year as method can be modfied bit, i see you are o achive encapsulation here by not exposing properties out side like year etc, you can change them to property. here is code which is cleaned little bit for you, you can learn using this code and understand constructor concept when not to expose such property(like color) outside if object can not sustain without it , pass it by constructor.

using System;
using System.Collections.Generic;
using System.Text;
namespace Car
{
    class Program
    {
        static void Main(string[] args)
        {
            Bil theCar = new Bil("red", "bob1337", "Ferrari");

            Console.WriteLine(theCar.Color);
            Console.WriteLine(theCar.License);
            Console.WriteLine(theCar.Make);

            Console.ReadLine();
            Console.ReadLine();
            Console.ReadLine();

            theCar.SetYear(2017);
            Console.WriteLine("Got my self a car of  " + theCar.Year + " Year model");
            Console.WriteLine(theCar.Status);
            Console.WriteLine("Trying to start the car..");
            theCar.Start();
            Console.WriteLine("Need to check if you started..." + theCar.Status);
            Console.WriteLine("Trying to stop the car..");
            theCar.stop();
            Console.WriteLine("Lets see if the car stopped... " + theCar.Status);
            Console.ReadKey();


        }
    }

    class Bil
    {
        public string Make { get; private set; }
        public string License { get; private set; }
        public string Color { get; private set; }

        private int year;
        private string status = "Car is not moving";

        public Bil(string color, string lic, string make) : this()
        {
            Color = color;
            License = lic;
            Make = make;
        }

        public Bil()
        {
            status = "Car is not moving";
        }



        public string Status
        {
            get
            {
                return status;
            }
            set
            {
                status = value;
            }           
        }

        public int Year
        {
            get
            {
                return year;
            }
        }

        public void Start()
        {
            status = "Car is moving";
        }

        public void stop()
        {
            status = "Car is not moving";
        }

        public void SetYear(int value)
        {
            year = value;
        }
    }
}


Рейтинг:
1

Member 14780771

использование системы;
использование системы.Коллекции.Общий;
использование System.Text;
автомобиль пространства имен
{
классная программа
{
static void Main(string[] args)
{
Бил машину = новый бил("красный", "bob1337", "Феррари");

Приставка.WriteLine(theCar.Цвет);
Приставка.WriteLine(theCar.Лицензия);
Приставка.Метода WriteLine(свою машину.Сделать);

Приставка.Линия чтения();
Приставка.Линия чтения();
Приставка.Линия чтения();

автомобиль.SetYear(2017);
Приставка.Метода WriteLine("у меня собственной машины" + машину.Год + " Модель года");
Приставка.Метода WriteLine(свою машину.Статус);
Приставка.WriteLine("пытаюсь завести машину..");
машину.Начать();
Приставка.WriteLine("нужно проверить, начали ли вы..." + theCar.Status);
Приставка.WriteLine("пытаюсь остановить машину..");
машину.стоп();
Приставка.WriteLine("давайте посмотрим, остановилась ли машина..." + theCar.Status);
Приставка.ReadKey();


}
}

класс Bil
{
общественные строку сделать { получить; частные набор; }
public string License { get; private set; }
public string Color { get; private set; }

частный инт год;
частная строка status = "автомобиль не движется";

общественные бил(цвет строки, строки ТИК, строку сделать) : этот()
{
Color = цвет;
Лицензия = лицензия;
Сделать = сделать;
}

общественные бил()
{
статус = "автомобиль не движется";
}



статус публичной строки
{
получить
{
статус возврата;
}
набор
{
значение состояния;
}
}

public int Year
{
получить
{
возвращение год;
}
}

общественного недействительными начать()
{
статус = "автомобиль движется";
}

остановка общественного транспорта()
{
статус = "автомобиль не движется";
}

public void SetYear(int value)
{
год = значение;
}
}
}


Рейтинг:
0

Patrice T

Вы определили метод status 2 раза в классе

    class Bil
    {


        public string Make { get; set; }        
        public string License { get; set; }
        public string Color { get; set; }

        private int year;
        private string status = "Car is not moving";
        public static void Start()
        {
            status = "Car is moving";
        }
        public static void  status()
        {
            return status;
        }
        public static void stop()
        {
            status = "Car is not moving";
        }
        public static void status()
        {
            return status;
        }
        public void setYear(int arg)
        {
            Year = arg;
        }
        public int getYear()
        {
            return Year;
        }
    }
}

В status метод, который вы должны заменить void с string.


bouya98

Я изменил его, заменил void строкой, а также удалил один метод. Я все еще получаю ошибки=

Описание Кода Серьезности Состояние Подавления Строки Файла Проекта Состояние Подавления
Ошибка CS1656 не может назначить "статус", поскольку это "группа методов" Car 61 Active
Ошибка CS0102 тип 'Bil' уже содержит определение для 'status' Car 55 Active
Ошибка CS0176 член 'Bil.status()' не может быть доступен со ссылкой на экземпляр; квалифицируйте его с именем типа вместо Car 28 Active
Ошибка CS0176 член 'Bil.Start()' не может быть доступен со ссылкой на экземпляр; квалифицируйте его с именем типа вместо Car 30 Active
Ошибка CS0176 член 'Bil.status()' не может быть доступен со ссылкой на экземпляр; квалифицируйте его с именем типа вместо Car 31 Active
Ошибка CS0176 член 'Bil.stop()' не может быть доступен со ссылкой на экземпляр; квалифицируйте его с именем типа вместо Car 33 Active
Ошибка CS0176 член 'Bil.status()' не может быть доступен со ссылкой на экземпляр; квалифицируйте его с именем типа вместо Car 34 Active
Ошибка CS1656 не может назначить "статус", потому что это "группа методов" Car 53 Active
Ошибка CS0428 не удается преобразовать группу методов "статус" в не делегированный тип "строка". Вы намеревались вызвать этот метод? Автомобиль 57

Patrice T

Воспользуйся Улучшить вопрос чтобы обновить ваш вопрос.
Чтобы каждый мог обратить внимание на эту информацию.
включите обновленный код.

bouya98

Сделано :)

Patrice T

вы не обновили свой код.

bouya98

А как насчет этого сейчас???