// Нестатический метод, void NonStaticMeth {
Console.WriteLine("В методе NonStaticMeth.");
}
/* Ошибка! Непосредственный вызов нестатического метода из статического метода недопустим. */ static void staticMeth {
NonStaticMeth; // не подлежит компиляции!
}
}
В данном
Следует особо подчеркнуть, что из метода типаstaticнельзя вызывать методы экземпляра и получать доступ к переменным экземпляра его класса, как это обычно делается посредством объектов данного класса. И объясняется это тем, что без указания конкретного объекта переменная или метод экземпляра оказываются недоступными. Например, приведенный ниже фрагмент кода считается совершенно верным.
class MyClass -{
// Нестатический метод, void NonStaticMeth {
Console.WriteLine("В методе NonStaticMeth.");
}
/* Нестатический метод может быть вызван из статического метода по ссылке на объект. */ public static void staticMeth(MyClass ob) { ob.NonStaticMeth; // все верно!
}
}
В данном примере метод NonStaticMeth вызывается из метода staticMeth по ссылке на объект ob типа MyClass.
Поля типа static не зависят от конкретного объекта, и поэтому они удобны для хранения информации, применимой ко всему классу. Ниже приведен пример программы, демонстрирующей подобную ситуацию. В этой программе поле типа static служит для хранения количества существующих объектов.
// Использовать поле типа static для подсчета // экземпляров существующих объектов.
using System;
class Countlnst {
static int count = 0;
// Инкрементировать подсчет, когда создается объект.
public Countlnst {
count++;
}
// Декрементировать подсчет, когда уничтожается объект.
~CountInst { count—;
}
public static int GetCountO { return count;
}
}
class CountDemo {
static void Main {
Countlnst ob;
for(int i=0; i < 10; i++) {
ob = new CountlnstO;
Console.WriteLine("Текущий подсчет: " + Countlnst.GetCount);
}
}
}
Выполнение этой программы приводит к следующему результату.
Текущий подсчет: 1 Текущий подсчет: 2 Текущий подсчет: 3 Текущий подсчет: 4 Текущий подсчет: 5 Текущий подсчет: 6 Текущий подсчет: 7 Текущий подсчет: 8 Текущий подсчет: 9 Текущий подсчет: 10