. Объектно-ориентированное программирование C# в деталях
Объектно-ориентированное программирование C# в деталях

Объектно-ориентированное программирование C# в деталях

Большое количество статей посвящены C # OOП, но в данной C # OOП объясняется на понятных примерах.

Класс - это макет. Что такое макет?

Макет – это схематический чертеж плана будущего проекта. Например, если Вы планируете строить новый дом, инженер объяснит план его конструирования, демонстрируя макет, как на рисунке ниже. После этого инженер на основе макета начнет строительство дома.

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

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

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

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

Классы и объекты – фундаментальные понятия объектно-ориентированного программирования (ООП).

Класс запускается введением ключевого слова «класс» и рядом указывается название Вашего класса. Вы можете дать любое название для класса. Далее нужно открыть и закрыть скобки, как показано на примере.

class ShanuHouseClass 1

Владелец дома может получить доступ и использовать все комнаты дома и технику. Аналогично, для доступа к классовому методу и значениям переменных нужно использовать объекты. Можно создать один или несколько объектов для того же класса. Например, можно сказать, что бывает один или много владельцев дома.

Ниже Вы увидите пример объекта, где "objHouseOwner" - это объект класса, который будет использоваться для доступа ко всем переменным параметрам и методам класса.

ShanuHouseClass1 objHouseOwner = new ShanuHouseClass1();

3. Значение переменной

Значения переменных используются для хранения наших характеристик. Наша характеристика может быть представлена в числовом виде или в виде текста. Например, чтобы сохранить номер телефона, можно использовать тип переменной "int", а чтобы сохранить имя, можно использовать измененный тип строки с именем для каждой переменной.

Переменные могут быть локальными или глобальными. Например, если Вы покупаете новый телевизор, к Вам придет специалист, чтобы настроить телевидение. Он даст Вам свой контактный номер на будущее. Скорее всего, Вы запишите его номер на бумажке и положите ее туда, где сможете быстро найди, когда она понадобится. Если Вы будете хранить этот листок на видном месте, то все Ваши гости смогут увидеть его. Глобальные или общие переменные похожи на этот пример. Если определить значение переменной как глобальное, то все методы внутри класса смогут получить доступ к значению переменной. Если Вы храните бумажку с номером в известном только Вам месте, то только Вы и видите контактный номер. Локальные частные переменные с этим схожи.

Синтаксис значений переменных:

Модификаторы доступа-тип данных-имя переменной

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

public String yourTVName;

private Boolean doYouHaveTV = true ;

public String yourTVName = "SAMSUNG" ;

static void Main( string [] args)

ShanuHouseClass objHouseOwner = new ShanuHouseClass();

Console.WriteLine( "You Have total " + objHouseOwner.noOfTV + " no of TV :" );

Console.WriteLine( "Your TV Name is :" + objHouseOwner.yourTVName);

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

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

Допустим, что каждый дом имеет въездные ворота. Используя ворота, Вы попадаете в свой дом. Аналогично, чтобы запустить программу, должен быть метод по умолчанию, который будет запускать программу. Основной метод полезен при запуске программы. Каждый раз, когда Вы будете запускать C# Console или приложение Windows, основной метод будет выполняться первым. Из основного метода можно создать объект для других классов и использовать их методы.

4. Метод или функции (метод функционирования)

Метод – это группа из операторов кода. Вот предыдущий пример программы с методом функционирования.

public String yourTVName = "SAMSUNG" ;

public void myFirstMethod()

Console.WriteLine( "You Have total " + noOfTV + "no of TV :" );

Console.WriteLine( "Your TV Name is :" + yourTVName);

static void Main( string [] args)

ShanuHouseClass objHouseOwner = new ShanuHouseClass();

Примечание: Большинство разработчиков интересовались разницей между методами и функциями. В этой статье понятие метода используется вместо понятия функции. Тем не менее, есть одно отличие между методами и функциями. В ООП языках, таких как C #, Java и т.д. используется термин метод, а для не-ООП программирования, таких как "C" и других – функция.

Предположим, что у Вас есть мобильный телефон и Вы храните на нем много песен. Тем не менее, Вы всегда любите слушать определенные песни. Очень сложно каждый раз выискивать из сотен песен на телефоне любимую и проигрывать ее. Вместо того, чтобы проделывать одну и ту же работу много раз, Вы можете использовать плейлисты. Щёлкните на плейлист и слушайте любимую музыку. Это облегчит Вашу работу, и Вам не придется повторять одни и те же действия постоянно. Методы используются как плейлист. Можно писать повторные коды для одного метода, а затем при необходимости использовать его.

В доме может быть одна большая комната или несколько комнат, и в каждой есть какое-то оборудование. Точно так же в классе можно увидеть один или несколько методов. В доме может быть две или три спальни, но кажая спальня отличается по размеру, цвету и так далее. Это означает, что одни и те же комнаты все равно разного типа. Так и в классе можно создать более одного метода с тем же именем, но с другим параметром. В ООП это называется "полиморфизм".

  • Модификаторы доступа: о них будет сказано далее в статье.
  • Тип возвращения: Если Ваш метод возвращает значение, тогда Вам следует использовать тип возвращения с любым типом данных, такие как string, int и так далее. Если метод не возвращает значение, используйте тип "Void".
  • Название метода: Здесь Вы задаете имя каждому методу.
  • Список параметров: список параметров или аргументов, которые Вы передаете функции.

Ниже приведен пример способа.

• Метод с типом Void: Void - ключевое слово, благодаря которому данные из методов не возвращаются.

public void veranda()

Console.WriteLine( "Welcome to Veranda" );

Console.WriteLine( "How Many Chairs Do you have in your Veranda" );

Console.WriteLine( "I have total " + NoofChair + " Chairs in my Veranda" );

• Метод с типом возврата: метод обернется в какой-то результат, который может использоваться в программе. Например, возьмем метод TVNAME с типом возврата "String". Можно сказать, что у Вас в доме есть телевизор в гостиной, родительской спальне и детской. В каждой комнате стоит телевизор разных фирм. Предположим, Вы хотите узнать название бренда телевизора. Вам нужно ввести один и тот же код трижды. Вместо повторного написания одинакового кода, Вы можете воспользоваться методом с типом возврата.

public string TVNAME()

Console.WriteLine( "Enter Your TV Brand NAME" );

• Метод со списком параметров: До сих пор Вы видели методы без параметров. Параметры используются для передачи некоторых данных методу, чтобы осуществить Ваш процесс как нельзя лучше. Например, Вы хотите перекрасить спальни. Вам нужно посоветоваться со всеми членами семьи, которые проживают с Вами в доме, по поводу цвета стен в спальнях. Вы можете задать имя пользователя и их любимый цвет в качестве параметра метода.

public void BedRoom(String nameandColor)

Console . WriteLine ( nameandColor );

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

public void BedRoom(String MemberName,String Color)

Console.WriteLine(MemberName + " Like " + Color + "Color" );

Пример законченного класса с основным методом:

int NoofChair = 0;

public String YOURTVName;

private Boolean DoyouHaveTV = true ;

public void veranda()

Console.WriteLine( "Welcome to Veranda" );

Console.WriteLine( "How Many Chairs Do you have in your Veranda" );

Console.WriteLine( "I have total " + NoofChair + " Chairs in my Veranda" );

public string TVNAME()

Console.WriteLine( "Enter Your TV Brand NAME" );

public void BedRoom(String nameandColor)

public void BedRoom(String MemberName,String Color)

Console.WriteLine(MemberName + " Like " + Color + "Color" );

static void Main( string [] args)

ShanuHouseClass1 objHouseOwner = new ShanuHouseClass1();

String returnvalue = objHouseOwner.TVNAME();

Console.WriteLine( "Your TV BRAND NAME IS: " +returnvalue);

objHouseOwner.BedRoom( "My Name is Shanu I like Lavender color" );

objHouseOwner.BedRoom( "My Name is Afraz I like Light Blue color" );

objHouseOwner.BedRoom( "SHANU" , "Lavender" );

Тема связана со специальностями:

5. Модификаторы доступа

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

  • частный
  • публичный
  • внутренний
  • защищенный
  • внутренний защищенный

Частный модификатор доступа.

Вернемся к примеру с домом. Охранник может охранять Ваш дом. Его обязанность - охранять вход в дом. Он не может зайти в дом и получить доступ ко всем вещам. Вы создаете SecurityGuardClass и называете переменную и метод для Security частным.

Общественный модификатор доступа.

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

Защищенный модификатор доступа.

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

Внутренний модификатор доступа.

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

public class sampleInternalClass

internal String myInternal = "Iam Internal Variable" ;

public String yourTVName = "SAMSUNG" ;

public void myFirstMethod()

Console.WriteLine( "You Have total " + noOfTV + "no of TV :" );

Console.WriteLine( "Your TV Name is :" + yourTVName);

static void Main( string [] args)

ShanuHouseClass objHouseOwner = new ShanuHouseClass();

sampleInternalClass intObj = new sampleInternalClass();

Console.WriteLine( "Internal Variable Example :" + intObj.myInternal);

Внутренний модификатор защиты.

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

public class sampleProtectedInternalClass

protected internal String myprotectedInternal = "Iam Protected Internal Variable" ;

public void protectedInternalMethod()

Console.WriteLine( "Protected Internal Variable Example :" + myprotectedInternal);

public class derivedClass : sampleProtectedInternalClass

public void derivedprotectedInternal()

Console.WriteLine( "Derived Protected Internal Variable Example :" + myprotectedInternal);

public String yourTVName = "SAMSUNG" ;

public void myFirstMethod()

Console.WriteLine( "You Have total " + noOfTV + "no of TV :" );

Console.WriteLine( "Your TV Name is :" + yourTVName);

static void Main( string [] args)

ShanuHouseClass objHouseOwner = new ShanuHouseClass();

sampleProtectedInternalClass intObj = new sampleProtectedInternalClass();

derivedClass proIntObj = new derivedClass();

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

Например, у Вас есть два класса: первый называется "Houseclass" и другой – "houseSecurityClass".

Вы видите значения переменных, спрятанных в классе, где "houseSecurityClass" – общественный, а "Houseclass" может получить доступ, но "Houseclass" имеет как общественные, так и частные значения переменной, в которой частное значение переменной класса не может быть доступным за пределами класса.

public class houseSecurityClass

public int noofSecurity;

public String SecurityName = String.Empty;

public class Houseclass

private int noofLockerinHosue = 2;

public string OwnerName = String.Empty;

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

public class HouseServerntClass

private int SaftyLoackerKeyNo = 10001;

public String roomCleanInstructions = "Clean All rooms" ;

private void saftyNos()

Console.WriteLine( "My SaftyLoackerKeyNo is" + SaftyLoackerKeyNo);

public void roomCleanInstruction()

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

Single level Inheritance: пример с одним базовым классом и одним производным

public class baseClass

private void privateMethod()

Console.WriteLine( "private Method" );

public void publicMethod()

Console.WriteLine( "This Method Shared" );

public class DerivedClass : baseClass

static void Main( string [] args)

DerivedClass obj = new DerivedClass();

Примечание: Базовый класс - высший класс, а производный класс - это класс (ы), который наследует базовый.

Наследование, где базовый класс - "GuestVist", а производный класс - "HouseOwnerClass".

В даном случае класс HouseOwnerClass наследует базовый класс GuestVist:

public void Guestwelcomemessage()

Console.WriteLine( "Welcome to our Home" );

public void GuestName()

Console.WriteLine( "Guest name is: Shanu" );

class HouseOwnerClass : GuestVist

static void Main( string [] args)

HouseOwnerClass obj = new HouseOwnerClass();

Многозначное Наследование: рассмотрим пример с более чем одним производным классом. Первый базовый класс происходит с DerivedClass1, а затем DerivedClass1 возникает с DerivedClass2. Теперь с DerivedClass2 Вы можете получить доступ и к BaseClass, и DerivedClass1.

public class baseClass

private void privateMethod()

Console.WriteLine( "private Method" );

public void publicMethod()

Console.WriteLine( "This Method Shared" );

public class DerivedClass1 : baseClass

public void DerivedClass1()

Console.WriteLine( "Derived Class 1" );

public class DerivedClass2 : DerivedClass1

static void Main( string [] args)

DerivedClass2 obj = new DerivedClass2();

Поддерживает ли .Net множественное наследование?

Ответ на этот вопрос - нет. В C # невозможно использовать множественное наследование класса.

Что такое множественное наследование?

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

Что произойдет, если ввести множественное наследование класса, используя C #?

Вернемся к примеру с домом. Производный класс "HouseOwnerClass" с двумя дополнительными классами "GuestVist" и "FriendsandRelationsClass".

Теперь предположим, что в Ваш дом пришел гость и друг. Для этого Вы вводите предыдущие три класса и наследуете два класса из Вашего производного класса.

Если ввести множественное наследование в C #, на экране отразится предупреждение "Ожидание интерфейса" во время процесса кодирования и выполнения программы.

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

В полиморфизме используетс метод перегрузки и замещения. Полиморфизм имеет два способа выполнения программы: полиморфизм времени компиляции (Compile Time Polymorphism) и времени работы полиморфизма (Run time Polymorphism).

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

На примере ниже Вы видите, что имя метода «BedRoom» использовалось для двух методов, но параметры для каждого из них разные.

📎📎📎📎📎📎📎📎📎📎