class AnotherStaticError {

// Нестатический метод, 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

Перейти на страницу:

Похожие книги