⇒ Библиотека книг по компьютерным технологиям
⇒ ⇒ Разработка 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
.
Заметьте, что для параметра ссылочного типа не имеет значения, как он передается — по ссылке или по значению, результат окажется одним и тем же. В обоих случаях все действия, выполненные над параметром, отразятся на объекте, который был передан в качестве параметра.
Все книги представлены на сайте исключительно для ознакомления с содержанием. |