Member 13634122 Ответов: 2

2 вопроса: что не так с кодом? Почему главное должно быть заявлено как статичное? Спасибо!


class A
             {
                    private double x1 ,x2;
	
                    public static void Main()
                    {
                        x1  =  100;
                        Console.WriteLine (x1);
                    }
                }


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

это вопросы для моих заметок о пересмотре, мне просто нужны ответы на мои вопросы, это не код, над которым я работаю ни для чего!

2 Ответов

Рейтинг:
9

OriginalGriff

То static ключевое слово-это особая вещь в C#, оно говорит, что "независимо от того, сколько экземпляров этого класса существует, существует только один из них"
Это как физическая константа в математике: существует одно и только одно значение Пи, но вы можете использовать его в любом количестве уравнений и вычислений, как вам нравится. Pi-это статическое значение в классе вычислений.

Instances are different: think about cars. This is my car, that it your car. Over there is that car, this car is blue, that car is red, my car is black. We know that when we discuss "my car" we are talking about a specific car: and we do not expect to put your mobile in the glove box of "your car" and then retrieve it from the glove box of "my car". We are aware that each car is a separate instance of a vehicle in the class of Cars. We we also all know that you can't ask "what colour is a car?" because not all cars are the same colour. Colour is an attribute of a specific instance of a car, so to access it we need to specify exactly which car we are talking about. But ... all cars have four wheels (or they wouldn't be a car) so "how many wheels has a car?" is a valid question.
Цвет-это вопрос экземпляра; WheelsCount-статический вопрос
Классы в C# работают одинаково: для данных экземпляра требуется экземпляр класса, а для статических данных-нет.

Когда система запускает приложение, ему нужно где - то начать выполнение-поэтому он ищет статический основной метод. Если бы он не был статичным, их могли бы быть десятки, и для запуска ему нужен был бы экземпляр, но вы не можете создать экземпляр до запуска программы!

Таким образом, Main является статическим - и в результате у него нет экземпляра, связанного с ним, - поэтому он не может получить доступ к переменным экземпляра, потому что он не знает, должен ли он использовать "этот экземпляр" или "тот экземпляр".

Вы можете позволить Main получить к нему доступ двумя способами:
1) Сделайте x1 статичным:

class A
    {
    private static double x1;
    private double x2;
    
    public static void Main()
        {
        x1 = 100;
        Console.WriteLine (x1);
        }
    }

Или
2) Создайте экземпляр своего класса:
class A
    {
    private double x1, x2;
    
    public static void Main()
        {
        A a = new (A);
        A.x1 = 100;
        Console.WriteLine (A.x1);
        }
    }

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


Member 13634122

Это полностью прояснило все для меня, отличное объяснение, большое спасибо!

OriginalGriff

Всегда пожалуйста!

Рейтинг:
17

Thomas Daniels

Main не удается получить доступ x1 или x2 потому что они являются переменными экземпляра: они существуют только на экземпляры из класса. Main это статический метод, поэтому он не связан с экземпляром, поэтому он не может получить доступ x1 или x2: он сможет получить доступ к этим двум переменным только в том случае, если они будут помечены static также.

И почему это происходит Main должны быть помечены как статические? Именно так работает C#: он определен не для создания экземпляра класса для точки входа, а для запуска статического метода, называемого Main.