Программирование >>  C# visual basicc# 

1 2 [ 3 ] 4 5 6 ... 10


public: void Foo()

Visual Basic

Public Class MyClass Public Sub Foo End Sub End Class

Параметры методов и типы возврата

В C# и C++/CLI параметры, передаваемые методам, определены внутри скобок. Тип параметра объявляется перед именем переменной. Для возврата значения метод определяется с типом возврата вместо слова void.

В Visual Basic используются операторы Sub для объявления метода, не возвращающего значение, и Function - для метода, который должен вернуть значение. Тип возврата следует после имени метода и скобок. Visual Basic также имеет другой порядок объявления переменной и типа в параметре. Тип следует за переменной, что противоположно порядку, принятому в C# и C++/CLI.

C#

public class MyClass

public int Foo(int i)

return 2 * i;

C++/CLI

public ref class MyClass

public:

int Foo(int i)

return 2 * i;

Visual Basic

Public Class MyClass Public Sub Foo1(ByVal i as Integer) End Sub

Public Function Foo(ByVal i As Integer) As Integer

Return 2 * i End Sub End Class

Модификаторы параметров

По умолчанию типы значений передаются по значению, а ссылочные типы - по ссылке. Если тип значений, переданный в виде параметра, должен быть изменен внутри вызванного метода, в C# вы можете использовать модификатор параметра ref.

В C++/CLI определена операция управляемой ссылки %. Эта операция подобна операции ссылки & в C++, но с тем отличием, что % может использоваться с управляемыми типами, и сборщик мусора может отслеживать такие объекты в случае, если они будут перемещаться внутри управляемой кучи.

В Visual Basic для передачи параметров по ссылке применяется ключевое слово ByRef.



C#

public class ParameterPassing

public void ChangeVal(ref int i)

i = 3;

C++/CLI

public ref class ParameterPassing

public:

int ChangeVal(int% i)

i = 3;

Visual Basic

Public Class ParameterPassing

Public Sub ChangeVal(ByRef i as Integer)

i = 3 End Sub End Class

При вызове метода со ссылочным параметром, только язык C# требует применения модификатора параметра. C++/CLI и Visual Basic не делают разницы при вызове метода с модификатором параметра или без него. C# здесь имеет преимущество, сразу заметное при вызове метода, который может менять значение переданного ему параметра.

Из-за синтаксиса вызова, который ничем не отличается, в Visual Basic не допускается перегрузка метода простым изменением модификатора. Компилятор C++/CLI разрешает перегрузку метода с изменением модификатора, но не может компилировать вызывающий его код, поскольку выбор конкретной реализации метода при этом неоднозначен. В C# можно перегружать и использовать методы, отличающиеся только модификатором параметра, но такая практика не рекомендуется.

C#

ParameterPassing obj = new ParameterPassing(); int a = 1;

obj.ChangeVal(ref a); Console.WriteLine(a); выводит 3

C++/CLI

ParameterPassing obj; int a = 1; obj.ChangeVal(a);

Console.WriteLine(a); выводит 3 Visual Basic

Dim obj as new ParameterPassing() Dim i as Integer = 1 obj.ChangeVal(i)

Console.WriteLine(i) выводит 3

В C# также определено ключевое слово out, когда параметр просто возвращается из метода. Эта опция недоступна в C++/CLI и Visual Basic. До тех пор, пока врезывающий и вызываемый код находятся в одном домене приложений, за кулисами нет разницы между out и ref, и вы можете обращаться к методу, объявленному с модификатором C# out в Visual Basic и C++/CLI, точно так же, как с модификатором параметра ref. Если метод используется между разнсми доменами приложений, то атрибут [out] может быть применяться вместе с Visual Basic и C++/CLI.



Конструкторы

Как в C#, так и в C++/CLI конструктор имеет имя, совпадающее с именем класса. Visual Basic использует процедуру по имени New. Ключевые слова this и Me используются для доступа к членам данного экземпляра. При вызове одного конструктора из другого в C# требуется инициализация членов. В C++/CLI и Visual Basic можно вызывать конструктор как метод.

C#

public class Person

public Person()

: this( unknown , unknown )

public Person(string firstname, string lastname)

this.firstname = firstname; this.lastname = lastname;

private string firstname; private string lastname;

C++/CLI

public ref class Person

public: Person()

Person( unknown , unknown );

Person(String firstname, String lastname)

this->firstname = firstname; this->lastname = lastname;

private:

String firstname; String lastname;

Visual Basic Public Class Person Public Sub New()

Me.New( unknown , unknown )

End Sub

Public Sub New(ByVal firstname As String, ByVal lastname As String) Me.MyFirstname = firstname Me.MyLastname = lastname

End Sub

Private MyFirstname As String Private MyLastname As String End Class

Свойства

Чтобы определить свойство, в C# требуется только определить средства доступа set и get внутри блока свойства. Средство доступа set автоматически создает значение переменной компилятором C#. В C# 3.0 также имеется новая сокращенная нотация, в которой реализация не требуется, если только простая переменная возвращается или устанавливается средствами доступа get и set. Синтаксис отличается от C++/CLI и Visual Basic. Оба эти языка имеют ключевое слово property, и необходимо



1 2 [ 3 ] 4 5 6 ... 10

© 2006 - 2024 pmbk.ru. Генерация страницы: 0
При копировании материалов приветствуются ссылки.
Яндекс.Метрика