Программирование на C# (Си Шарп) - ООП в .NET - Экземпляры объектов

Программирование на C# - ООП C#

ООП С Sharp - Экземпляры объектов

Проще всего понять, как использовать класс в коде, можно, представив его как новый тип переменных. Вы используете предопределенные типы переменных — такие как int, float, double и прочие. Объявляя класс Authenticator, вы тем самым сообщаете компилятору о существовании нового типа переменной, называемого Authenticator. Определение класса содержит все, что компилятору нужно знать, чтобы быть готовым к работе с переменными этого типа.

Таким образом, точно так же, как компилятор знает, что double содержит число с плавающей запятой, сохраненное в определенном формате (что, например, позволяет складывать значения типа double), объявление класса сообщает компилятору, что переменная типа Authenticator содержит string и позволяет вам вызывать методы IsPasswordCorrect() и ChangePassword().

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

 
using System;
namespace Wrox.ProCSharp.OOProg
{
class MainEntryPoint
{
static void Main()
{
Authenticator myAccess = new Authenticator();
bool done;
done = myAccess.ChangePassword("", "MyNewPassword");
if (done == true)
Console.WriteLine("Пароль для myAccess изменен");
else
Console.WriteLine("Не удалось изменить пароль myAccess");
done = myAccess.ChangePassword("", "AnotherPassword");
if (done == true)
Console.WriteLine("Пароль для myAccess изменен");
else
Console.WriteLine("Не удалось изменить пароль myAccess");
if (myAccess.IsPasswordCorrect("WhatPassword"))
Console.WriteLine("Пароль myAccess проверен");
else
Console.WriteLine("Пароль myAccess не прошел проверку");
}
}
public class Authenticator
{
// Реализация показана выше
}
} 

Реализация класса MainEntryPoint подобна Authenticator — он может иметь свои собственные члены (то есть собственные поля, методы и так далее). Однако в данном случае он служит лишь контейнером для метода Main() — точки хода в программу. Такой подход означает, что класс Authenticator может оставаться просто классом, который используют другие программы (либо посредством вырезания и вставки его кода, либо путем его компиляции в отдельную сборку). MainEntryPoint оформлен в виде класса, потому что существует синтаксическое требование C#, гласящее, что главная точка входа в программу должна быть определена внутри класса, а не в виде независимой функции. Поскольку все действие происходит в методе Main(), рассмотрим его более внимательно. Вот первая строка, представляющая интерес:

 
Authenticator myAccess = new Authenticator(); 

Здесь объявляется и создается новый экземпляр объекта Authenticator. Не беспокойтесь пока о = new Authenticator() — это часть синтаксиса C#, и присутствует она здесь потому, что в C# классы всегда доступны по ссылке. Вы можете использовать следующую строку, если хотите просто объявить новый объект Authenticator с именем myAccess:

 
Authenticator myAccess; 

Это объявление может содержать ссылку на объект Authenticator без действительного создания какого-либо объекта (примерно так же, как в Visual Basic строка Dim obj As Object не создает никакого объекта). Операция new в C# — это то, что в действительности создает объект Authenticator.

Вызов методов класса выполняется с помощью символа точки (.), присоединенной к имени переменной:

 
done = myAccess.ChangePassword("", "MyNewPassword"); 

Здесь вызывается метод ChangePassword() экземпляра myAccess, а возвращенное значение помещается в переменную done типа Boolean. Аналогичным образом можно обращаться к полям класса. Однако, обратите внимание, что вы не можете поступить так:

 
string myAccessPassword = myAccess.password; 

Этот код вызовет ошибку компиляции, поскольку поле password помечено как private, поэтому прочий код, находящийся вне Authenticator, не имеет доступа к нему. Если вы измените модификатор доступа поля password на public, предыдущая строка скомпилируется, и значение поля password будет присвоено строковой переменной.

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

Теперь, когда вы понимаете, как создавать экземпляры объектов, вызывать методы класса, обращаться к открытым полям, логика метода Main() станет вполне понятной. После сохранения этого кода как Authenticator.cs, компиляции и запуска получается следующий результат:

 
Authenticator
Пароль для myAccess изменен
Не удалось изменить пароль myAccess
Пароль myAccess не прошел проверку 

Необходимо отметить два момента относительно приведенного выше кода. Во-первых, пока мы не делали ничего нового по сравнению с кодированием модуля класса Visual Basic, равно как и ничего такого, что отличалось бы от базового синтаксиса C#. Цель этого примера — убедиться, что вы четко понимаете концепции, лежащие в основе классов.

Во-вторых, в предыдущем примере используется класс Authenticator непосредственно в другом коде внутри того же исходного файла. Но вам часто придется писать классы, которые нужно будет использовать в других проектах.

 

Добавить комментарий


Защитный код
Обновить