|
Программирование >> C# visual basicc#
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, и необходимо
|
© 2006 - 2024 pmbk.ru. Генерация страницы: 0
При копировании материалов приветствуются ссылки. |