Поделиться через


Объектно-ориентированное программирование (C# и Visual Basic)

Все управляемые языки в платформа.NET Framework, таких как Visual Basic и C# обеспечивают полную поддержку объектно ориентированного программирования, включая инкапсуляцию, наследование и полиморфизм.

Инкапсуляция означает, что группа связанных свойств, методов и других членов рассматривается как единый элемент или объект.

Наследование Описывает возможность создания новых классов на основе существующих классов.

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

В этом разделе рассматриваются следующие понятия:

  • Классы и объекты

    • Члены класса

      Свойства и поля

      Методы

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

      Деструкторы

      События

      Вложенные классы

    • Модификаторы доступа и уровни доступа

    • Создание экземпляров классов

    • Статические (Shared) классы и члены

    • Анонимные типы

  • Наследование

    • Переопределение членов
  • Интерфейсы

  • Универсальные шаблоны

  • Делегаты

Классы и объекты

Условия Класс и объект Иногда используются попеременно, но в действительности классы описывают Тип объектов, а объекты — можно использовать экземпляры классов.Поэтому процесс создания объекта называется При создании экземпляра.Использовать сравнение с чертежом, то класс является чертежом, а объект является зданием, построенным по нему.

Определение класса:

Class SampleClass
End Class
class SampleClass
{
}

Visual Basic и C# также предоставляют облегченную версию классов — структуры полезны, когда нужно создать большой массив объектов потребляют слишком много памяти для этого не требуется.

Для определения структуры:

Structure SampleStructure
End Structure
struct SampleStruct
{
}

Дополнительные сведения см.

Dd460654.collapse_all(ru-ru,VS.110).gifЧлены класса

Каждый класс может иметь различные члены класса которые включают в себя свойства, описывающие данные класса, методы, задающие поведение класса и события, которые обеспечивают связь между различными классами и объектами.

Dd460654.collapse_all(ru-ru,VS.110).gifСвойства и поля

Поля и свойства представляют сведения, содержащиеся в объекте.Поля подобны переменным, так как прочитать или изменить напрямую.

Чтобы определить поле:

Class SampleClass
    Public SampleField As String
End Class
Class SampleClass
{
    public string sampleField;
}

Свойства получения и процедур, которые расширяют возможности управления на и возвращаемое значение.

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

Определение автоматически реализуемого свойства:

Class SampleClass
    Public Property SampleProperty as String
End Class
class SampleClass
{
    public int SampleProperty { get; set; }
}

Если необходимо выполнить дополнительные операции чтения и записи значения свойства, определите поле для хранения значения свойства и обеспечивают базовую логику для хранения и извлечения его:

Class Samplelass
    Private m_Sample As String
    Public Property Sample() As String
        Get
            ' Return the value stored in the field.
            Return m_Sample
        End Get
        Set(ByVal Value As String)
            ' Store the value in the field.
            m_Sample = Value
        End Set
    End Property
End Class
class SampleClass
{
    private int _sample;
    public int Sample
    {
        // Return the value stored in a field.
        get { return _sample; }
        // Store the value in the field.
        set { _sample = value; }
    }
}

Большинство свойств имеют методы или процедуры для задания и возврата значения свойства.Однако можно создать свойства только для чтения или только для записи, чтобы ограничить их от изменения и чтения.В Visual Basic можно использовать Только для чтения и WriteOnly ключевые слова.В C# можно опустить получить или набор Свойство метода.Однако в Visual Basic и C#, автоматически реализуемые свойства не может быть только для чтения или только для записи.

Дополнительные сведения см.

Dd460654.collapse_all(ru-ru,VS.110).gifМетоды

A метод Это действие, выполняемое объектом.

ПримечаниеПримечание

В Visual Basic существует два способа создания метода: в Sub оператор используется, если метод не возвращает значение; в Функция Если метод возвращает значение, используется оператор.

Определение метода класса:

Class SampleClass
    Public Function SampleFunc(ByVal SampleParam As String)
        ' Add code here
    End Function
End Class
class SampleClass
{
    public int sampleMethod(string sampleParam)
    {
        // Insert code here
    }
}

Класс может иметь несколько реализаций или перегрузки, которые отличаются от других числом или типами параметров метода.

Попытка перегрузки одного метода:

Overloads Sub Display(ByVal theChar As Char)
    ' Add code that displays Char data.
End Sub
Overloads Sub Display(ByVal theInteger As Integer)
    ' Add code that displays Integer data.
End Sub
public int sampleMethod(string sampleParam) {};
public int sampleMethod(int sampleParam) {}

В большинстве случаев объявите метод в определении класса.Однако Visual Basic и C# также поддерживают методы расширения которые позволяют добавлять методы к существующему классу вне определения класса.

Дополнительные сведения см.

Dd460654.collapse_all(ru-ru,VS.110).gifКонструкторы

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

Чтобы определить конструктор для класса:

Class SampleClass
    Sub New(ByVal s As String)
        // Add code here.
    End Sub
End Class
public class SampleClass
{
    public SampleClass()
    {
        // Add code here
    }
}

Дополнительные сведения см.

Dd460654.collapse_all(ru-ru,VS.110).gifДеструкторы

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

Дополнительные сведения о деструкторах и сборке мусора в платформа.NET Framework см. Сборка мусора.

Dd460654.collapse_all(ru-ru,VS.110).gifСобытия

События позволяют классу или объекту уведомлять другие классы или объекты о возникновении.Класс, который отправляет (или вызывает) событие, называется Издатель и классы, которые получают (или обработки) событие, называются подписчики.Дополнительные сведения о событиях как порождаются и обрабатываются, см. Обработка и вызов событий.

Dd460654.collapse_all(ru-ru,VS.110).gifВложенные классы

Класс, определенный внутри другого класса, называется вложенные.По умолчанию вложенный класс является закрытым.

Class Container
    Class Nested
    ' Add code here.
    End Class
End Class
class Container
{
    class Nested
    {
        // Add code here.
    }
}

Для создания экземпляра вложенного класса, используйте имя класса контейнера следуют точки и затем имя вложенного класса:

Dim nestedInstance As Container.Nested = New Container.Nested()
Container.Nested nestedInstance = new Container.Nested()

Dd460654.collapse_all(ru-ru,VS.110).gifМодификаторы доступа и уровни доступа

Все классы и члены классов могут указывать уровни доступа, предоставляемые другим классам с помощью модификаторы доступа.

Доступны следующие модификаторы доступа.

Модификатор Visual Basic

Модификатор C#

Определение

Public (Visual Basic)

открытый

Тип или член может осуществляться из любого кода в той же сборке или в другой сборке, на него ссылается.

Private (Visual Basic)

закрытый

Тип или член доступен только из кода в том же классе.

Protected (Visual Basic)

защищенные

Тип или член доступен только из кода в том же классе или в производном классе.

Friend (Visual Basic)

Внутренний

К типу или члену возможен из любого кода в той же сборке, но не из другой сборки.

Защищенный дружественный

protected internal

К типу или члену возможен из любого кода в той же сборке, или из производного класса в другой сборке.

Дополнительные сведения см. Уровни доступа в Visual Basic и Модификаторы доступа (Руководство по программированию в C#).

Dd460654.collapse_all(ru-ru,VS.110).gifСоздание экземпляров классов

Чтобы создать объект, необходимо создать экземпляр класса, или создать экземпляр класса.

Dim sampleObject as New SampleClass()
SampleClass sampleObject = new SampleClass();

После создания экземпляра класса, можно присваивать значения свойствам и полям экземпляра и вызывать методы класса.

' Set a property value.
sampleObject.SampleProperty = "Sample String"
' Call a method.
sampleObject.SampleMethod()
// Set a property value.
sampleObject.sampleProperty = "Sample String";
// Call a method.
sampleObject.sampleMethod();

Чтобы назначить значения свойств во время создания экземпляра класса, используйте инициализаторы объектов:

Dim sampleObject = New SampleClass With 
    {.FirstProperty = "A", .SecondProperty = "B"}
// Set a property value.
SampleClass sampleObject = new SampleClass 
    { FirstProperty = "A", SecondProperty = "B" };

Дополнительные сведения см.

Dd460654.collapse_all(ru-ru,VS.110).gifСтатические (Shared) классы и члены

Статические (Общие в Visual Basic) член класса является свойство, процедура или поле, которое является общим для всех экземпляров класса.

Определение статического члена (общий):

Class SampleClass
    Public Shared SampleString As String = "Sample String"
End Class
static class SampleClass
{
    public static string SampleString = "Sample String";
}

Для доступа к статическим (общей), используйте имя класса без создания объекта этого класса:

MsgBox(SampleClass.SampleString)
Console.WriteLine(SampleClass.SampleString);

Статические (совместно используемые) классы в C# и модули в Visual Basic имеет только статические (совместно используемые) члены и не может быть создан.Статические (совместно используемые) члены также нет доступа к нестатическим (не используемой совместно) свойства, поля или методы

Дополнительные сведения см.

Dd460654.collapse_all(ru-ru,VS.110).gifАнонимные типы

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

Создание экземпляра анонимного типа:

' sampleObject is an instance of a simple anonymous type.
Dim sampleObject = 
    New With {Key .FirstProperty = "A", .SecondProperty = "B"}
// sampleObject is an instance of a simple anonymous type.
var sampleObject = 
    new { FirstProperty = "A", SecondProperty = "B" };

Дополнительные сведения см.

Наследование

Наследование позволяет создать новый класс, который используется повторно, расширяют и изменяют поведение, определенное в другом классе.Класс, члены которого наследуются, называется базовый класс, и класс, который наследует эти члены называется производный класс.Тем не менее, все классы в C# и Visual Basic неявно наследуют от Object класс, который поддерживает иерархию классов .NET и предоставляет низкоуровневые службы для всех классов.

ПримечаниеПримечание

Управляемые языки в платформа.NET Framework не поддерживают множественное наследование, я.e. можно указать только один базовый класс для производного класса.

Наследование от базового класса:

Class DerivedClass
    Inherits BaseClass
End Class
class DerivedClass:BaseClass{}

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

Чтобы указать, что класс не может использоваться как базовый класс:

NotInheritable Class SampleClass
End Class
public sealed class A { }

Чтобы указать, что класс может использоваться в качестве базового класса и не может быть создан:

MustInherit Class BaseClass
End Class
public abstract class B { }

Дополнительные сведения см.

Dd460654.collapse_all(ru-ru,VS.110).gifПереопределение членов

По умолчанию производный класс наследует все члены от своего базового класса.Чтобы изменить поведение унаследованного члена, необходимо переопределить его.То есть можно определить новую реализацию метода, свойства или события в производном классе.

Следующие модификаторы, используемые для управления переопределением свойств и методов.

Модификатор Visual Basic

Модификатор C#

Определение

Overridable (Visual Basic)

virtual (Справочник по C#)

Позволяет члену класса должен быть переопределен в производном классе.

Overrides (Visual Basic)

override (Справочник по C#)

Переопределяет виртуальный (переопределяемый) член в базовом классе.

NotOverridable (Visual Basic)

Не поддерживается

Член не переопределен в наследующем классе.

MustOverride (Visual Basic)

abstract (Справочник по C#)

Необходимо, чтобы член класса должен быть переопределен в производном классе.

Shadows (Visual Basic)

Модификатор new (Справочник по C#)

Скрывает члены, унаследованные от базового класса

Интерфейсы

Аналогично классам, интерфейсы определяют набор свойств, методов и событий.Но в отличие от классов, интерфейсы не содержат их реализацию.Они реализуются классами и определяются как отдельные от классов.Интерфейс представляет собой контракт, в том, что класс, реализующий интерфейс должен реализовывать каждый аспект этого интерфейса, точно так же, как она определена.

Определение интерфейса:

Public Interface ISampleInterface
    Sub DoSomething()
End Interface
interface ISampleInterface
{
    void doSomething();
}

Для реализации интерфейса в классе:

Class SampleClass
    Implements ISampleInterface
    Sub doSomething
        ' Method implementation.
    End Sub
End Class
class SampleClass : ISampleInterface
{
    void ISampleInterface.SampleMethod()
    {
        // Method implementation.
    }
}

Дополнительные сведения см.

Универсальные шаблоны

Классы, структуры, интерфейсы и методы в платформа.NET Framework можно параметры типа которые определяют типы объектов, которые они хранят или используют.Наиболее распространенным примером универсального шаблона является коллекцией, где можно указать тип объектов, хранящихся в коллекции.

Определение универсального класса:

Class SampleGeneric(Of T)
    Public Field As T
End Class
Public class SampleGeneric<T> 
{
    public T Field;
}

Для создания экземпляра универсального класса:

Dim sampleObject As New SampleGeneric(Of String)
sampleObject.Field = "Sample string"
SampleGeneric<string> sampleObject = new SampleGeneric<string>();
sampleObject.Field = "Sample string";

Дополнительные сведения см.

Делегаты

A делегат является типом, который определяет сигнатуру метода и может обеспечивать связь с любым методом с совместимой сигнатурой.Можно вызвать (или вызвать) метод через делегат.Делегаты используются для передачи методов в качестве аргументов к другим методам.

ПримечаниеПримечание

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

Для создания делегата:

Delegate Sub SampleDelegate(ByVal str As String)
public delegate void SampleDelegate(string str);

Чтобы создать ссылку на метод, который соответствует сигнатуре, указанной делегатом:

Class SampleClass
    ' Method that matches the SampleDelegate signature.
    Sub SampleSub(ByVal str As String)
        ' Add code here.
    End Sub
    ' Method that instantiates the delegate.
    Sub SampleDelegateSub()
        Dim sd As SampleDelegate = AddressOf SampleSub
        sd("Sample string")
    End Sub
End Class
class SampleClass
{
    // Method that matches the SampleDelegate signature.
    public static void sampleMethod(string message)
    {
        // Add code here.
    }
    // Method that instantiates the delegate.
    void SampleDelegate()
    {
        SampleDelegate sd = sampleMethod;
        sd("Sample string");
    }
}

Дополнительные сведения см.

См. также

Основные понятия

Руководство по программированию на C#

Другие ресурсы

Руководство по программированию на Visual Basic