Библиотека книг по компьютерным технологиям
⇒ ⇒ Разработка Windows-приложений на Microsoft Visual Basic .NET и Microsoft Visual C# .NET. Учебный курс MCAD/MCSD
⇒ ⇒ ⇒ Глава 1. Введение в .NET Framework
⇒ ⇒ ⇒ ⇒ Занятие 4. Методы

Читать далее: Выходные параметры

Параметры

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

Visual Basic .NET

Public Sub DisplayName(ByVal name As String, ByVal age As Byte)
  Console.WriteLine("Hello " & name & ". You are " & age.ToString & " years old.")
End Sub

Visual C#

public void DisplayName(string name, byte age)
{
  Console.WriteLine("Hello " + name + ". You are " + age.ToString() + " years old.");
}

У этого метода два параметра: один типа String, с локальным именем name, а второй, age, — типа Byte. Их область видимости ограничена методом, вне которого переменные не доступны. Подробнее об области видимости — на занятии 5.

Есть два способа передачи параметров — по значению и по ссылке. По умолчанию в .NET Framework параметры передаются по значению. Это означает, что когда переменная передается как параметр, создается новая переменная того же типа, в которую копируется значение исходной переменной. Вызываемому методу передается новая переменная, поэтому никакие изменения, вносимые методом в переданное ему значение, не затрагивают исходную переменную. Хотя этот способ передачи параметров принят по умолчанию, в Visual Basic .NET разрешается явно указать его при помощи ключевого слова ByVal.

Если параметр передают по ссылке, то вместо значения переменной методу передается ссылка на область памяти, в которой оно хранится. Если вызванный метод изменит значение, переданное ему как параметр, фактически он изменит значение исходной переменной. Чтобы указать, что параметр передается по ссылке, в Visual Basic .NET применяют ключевое слово ByRef, а в Visual C# — ref. Далее показаны примеры передачи параметров по ссылке и по значению:

Visual Basic .NET

Public Sub Demo1()
  Dim x, y As Integer

  x = 15
  y = 20

  ' Вызвать метод Demo2, объявленный ниже.
  Demo2(x, y)

  ' Каковы значения x и y?
  MessageBox.Show("X = " & x.ToString & " Y = " & y.ToString)
End Sub

Public Sub Demo2(ByVal p1 As Integer, ByRef p2 As Integer)
  p1 = p1 + p2
  p2 = p2 + p1
End Sub

Visual C#

public void Demo1()
{
  int x, y;

  x = 15;
  y = 20;

  // Вызвать метод Demo2, объявленный ниже.
  Demo2(x, ref y);

  // Каковы значения x и y?
  System.Windows.Forms.MessageBox.Show("X = " + x.ToString() + " Y = " + y.ToString());
}

public void Demo2(int p1, ref int p2)
{
  p1 = p1 + p2;
  p2 = p2 + p1;
}

Здесь создаются две переменные — x и y, которым присваиваются начальные значения. После этого они передаются другому методу в качестве параметров, причем x передается по значению, а y — по ссылке. В вызванном методе x и y представлены соответственно параметрами p1 и p2. Поскольку параметр p1 передан по значению, это просто копия переменной x, и все действия, выполняемые над p1, никак не влияют на значение переменной x. После завершения метода Demo2 переменная p1 выходит из области видимости, а занятая ею память освобождается. Иначе дело обстоит с параметром p2: в нем нет, собственно, значения — только ссылка на область памяти, в которой хранится значение переменной y, поэтому при выполнении команды p2 = p2 + p1 изменяется значение, на которое указывает p2. Таким образом, после завершения метода Demo1 значение x не меняется (15), а значение y станет равно 55.

Заметьте, что для параметра ссылочного типа не имеет значения, как он передается — по ссылке или по значению, результат окажется одним и тем же. В обоих случаях все действия, выполненные над параметром, отразятся на объекте, который был передан в качестве параметра.

Google
 
Рейтинг@Mail.ru
Сайт управляется системой uCoz