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);
}
}
В этом есть смысл?