Методы в C#

Метод определяет процедуру, которую можно выполнить над объектом или классом. Если метод является методом экземпляра, то его можно вызывать на объекте.

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

Методы могут иметь присоединенные к ним атрибуты метаданных, а также необязательные модификаторы. Эти модификаторы управляют доступностью методов, а также улучшают методы, подходящие для наследования. Каждый метод либо имеет, либо не имеет типа возврата. Если метод не имеет типа возврата, то в его объявлении в качестве такого типа должно указываться void. Методы могут иметь или не иметь параметров.

Статические методы

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

1
2
3
4
5
6
7
8
9
10
public class А
{
public static void SomeFunction()
{
System.Console.WriteLine( "Вызван метод SomeFunction()" );
}
static void Main() {
A.SomeFunction();
SomeFunction();
}

Обратите внимание, что оба метода в этом примере являются статическими. В методе Main сначала вызывается метод SomeFunction с указанием имени класса. После этого вызывается статический метод без указания имени класса. Причина в том, что методы Main и SomeFunction определены в одном и том же классе и оба являются статическими.

Если бы метод SomeFunction относился к другому классу, скажем, В, на этот метод пришлось бы ссылаться следующим образом: В. SomeFunction.

Методы экземпляра

Методы экземпляра работают с объектами. Для того чтобы вызвать метод экземпляра, необходимо сослаться на экземпляр класса, определяющего этот метод. В следующем примере демонстрируется применение метода экземпляра:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
public class А
{
private void SomeOperation()
{
x = 1;
this.у = 2;
z = 3;
// присваивание this в объектах является ошибкой
// A newinstance = new А() ;
// this = newinstance;
}
private int x;
private int y;
private static int z;
static void Main()
{
A obj = new A () ;
obj.SomeOperation();
System.Console.WriteLine ( "x = {0}, y= {1}, z= {2}", obj.x, obj. y, A.z );
}

В методе Main создается новый экземпляр класса А и затем вызывается метод SomeOperation через экземпляр этого класса. Внутри тела метода SomeOperation имеется доступ к полям экземпляра и статическим полям класса, поэтому присваивать им значения можно просто с использованием их идентификаторов.

Несмотря на то что, как уже упоминалось, в методе SomeOperation можно присваивать значение статическому члену z, не квалифицируя его, для достижения лучшей читабельности кода во время присваивания значений следует квалифицировать статические поля даже в методах, относящихся к тому же самому классу.

Поступив так, вы поможете тем, кому придется сопровождать код, даже если это будете вы сами!

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

При попытке сделать это компилятор сообщит об ошибке, и код не скомпилируется.

Вы можете следить за любыми ответами на эту запись через RSS 2.0 ленту. Вы можете оставить ответ, или trackback с вашего собственного сайта.

Оставьте отзыв

XHTML: Вы можете использовать следующие теги: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>

 
Rambler's Top100