C#. Урок 7. Поля, свойства, методы

Уроки для опытных   14 февраля 2013  Автор статьи:  

Продолжаем более подробно рассматривать ООП в языке C#.

Начнем с полей и свойств, так как это 2 взаимосвязанных понятия. Поле — переменная класса или структуры, хранящая значение. Свойство — это метод или пара методов, предназначенных для чтения и корректной записи в поле, то есть оно служит для инкапсуляции (закрытия) поля. Составляющими свойства являются — getter и setter. Cвойство в С# 3.0 можно записать следующим образом:

public DateTime BirthDate {get; set;}

Это будет соответствовать записи:

private DateTime birthDate;
public DateTime BirthDate
{
get { return birthDate;}
set { birthDate = value;}
}

Заметим, что getter и setter также могут иметь собственные спецификаторы доступа. Далее рассмотрим методы, которые делятся на:

  • Конструкторы
  • Деструкторы
  • Статические методы
  • Операторы

В любом классе существует конструктор «по умолчанию». Он вызывается при создании экземпляра класса, например: Circle c = new Circle();, если конструктор не задан явно:

public Circle()
{
this.x = 0;
this.y = 0;
this.r = 1;
}

Класс или структура могут иметь несколько конструкторов, принимающие на вход различные параметры. Конструктор с параметрами задается следующим образом (в данном случае ключевое слово this используется для различия элементов с одинаковыми именами):

public Circle(double x, double y, double r)
{
this.x = x;
this.y = y;
this.r = r;
}

В языке C# также есть деструкторы:

public MyClass
{
~MyClass()
{
}
}

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

public class MyClass
{
public static int x;
public static int Func()
{
return x * x;
}
}
...
MyClass.x = 2;
Console.WriteLine(MyClass.Func());

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

  • 1. В C# нет деструкторов.
    2. То, что описано в статье (финализатор), необходимо не для освобождения памяти.
    3. Статический конструктор может вызываться не только перед первым созданием экземпляра класса.
    4. Кроме четырех «типов методов» существуют еще методы экземпляра класса и extension methods, т.е. расширения.

    • alexxx16

      1. В C# нет деструкторов как таковых, например, как в C++. Под деструктором и понимается как раз финализатор (название деструктор дается на msdn). А вообще вопрос спорный.
      2. Имелось ввиду, что нужен для удаления экземпляров класса и освобождения связанных с ним ресурсов.
      3. Возможно некорректно построил предложение, имелось ввиду, что вызывается не только перед первым созданием экземпляра класса, а 1 раз перед первым созданием экземпляра класса.
      4. Намерено не включил методы расширения, они будут как минимум статей через 10.

Научиться программировать

  • на Delphi

  • на Java

  • на C++