Основне меню  

   

Реклама  

Скачуйте відеуроки для створення сайту за допомогою SMS Joomla 

реклама

 

 

   

Ми в Facebook  

Калькулятор расчета пеноблоков смотрите на этом ресурсе
Все о каркасном доме можно найти здесь http://stroidom-shop.ru
Как снять комнату в коммунальной квартире смотрите тут comintour.net
   

Реклама в мережі  

   

Статистика  

Користувачі
1
Статті
184
Перегляди статей
851553
   

Пошук по сайту  

   

Ми знаходимось тут  

   

Посібник Delphi  

ДОСТУПНИЙ ВИКЛАД,

ЦІКАВІ ПРИКЛАДИ, ВИХІДНІ КОДИ.

ЦІНА ДИСКА З МАТЕРІАЛАМИ - 500 грн. 

Якщо ваша карта обслуговується ПриватБанком тоді переведіть потрібну суму через Приват24 на карту    5168 7573 0556 9925 або натисніть на посилання "Перейти до оплати", щоб здійснити миттєвий платіж без комісії. Перейти до оплати!

 Звертайтесь за адресою еmail:kuzbyt@ukr.net

 
   

Посібник по C#  

 Вивчаємо сучасну мову  програмування C# 7.0

ПРОГРАМУЄМО в VISUAL STUDIO 2017

ЦІНА ДИСКА З МАТЕРІАЛАМИ - 1000 грн. 

Якщо ваша карта обслуговується ПриватБанком тоді переведіть потрібну суму через Приват24 на карту    5168 7573 0556 9925 або натисніть на посилання "Перейти до оплати", щоб здійснити миттєвий платіж без комісії. Перейти до оплати!

 Звертайтесь за адресою еmail:kuzbyt@ukr.net

 
   

Випадкове фото  

   

Наш відеоканал  

   

Відвідування сайту  

Яндекс.Метрика

 

   

Відеокурс по С++  

   

Рекомендуємо:  

   

У мові Сі-Шарп всі типи даних діляться на дві категорії -  типи посилання, і типи значень. Вони відрізняються способом зберігання в пам'яті, продуктивністю і іншим. На цьому уроці ми поговоримо, що це все означає, а також про передачу параметрів в метод по посиланню (ключові слова ref і out).

Типи значень

Цю категорію також називають структурними типами. Типи значень зберігаються в стеці. Стек - це область пам'яті, яка використовується для передачі параметрів в методи і зберігання визначених у межах методів локальних змінних. Дані змінної типу значення зберігаються в самій змінної.

 

До типів значень відносяться:

- Цілочисельні типи (byte, sbyte, char, short, ushort, int, uint, long, ulong);

- Типи з плаваючою комою (float, double);

- Тип decimal;

- Тип bool;

- Призначені для користувача структури (struct);

- Перерахування (enum).

Код нижче показує, що при присвоєнні значення однієї змінної значимого типу інший, подальша зміна однієї з змінних не впливає на іншу. Так тому, що зберігання даних значимого типу відбувається в самій змінної:

 static void Main(string[] args)

{
   int a = 1;
   int b = 2;
   b = a;
   a = 3;
   Console.WriteLine(a); // 3 
   Console.WriteLine(b); // 1 
}

Типи посилання

Змінна посилального типу містить не дані, а посилання на них. Самі дані в цьому випадку вже зберігаються в купі. Купа - це область пам'яті, в якій розміщуються керовані об'єкти, і працює збирач сміття. Складальник сміття звільняє всі ресурси і об'єкти, які вже не потрібні.

До посилальних типів відносяться:

- Класи (class);

- Інтерфейси (interface);

- Делегати (delegate);

- Тип object;

- Тип string.

У коді нижче був створений простий клас, в якому є одне поле типу int. Далі була пророблена така ж процедура, як і в випадку вище, тільки результат вже інший. Після присвоєння одного об'єкта іншому, вони стали вказувати на одну і ту ж область пам'яті (міняємо b - змінюється і a): 

 class Test

{
   public int x;
}
class Program

   static void Main(string[] args)
   {
     Test a = new Test();
     Test b = new Test();
     a.x = 1; 
     b.x = 2;
     b = a; // присвоєння посилання
     b.x = 3; 
     Console.WriteLine(a.x); // 3
     Console.WriteLine(b.x); // 3
   }
}

Передача параметрів в метод по посиланню. Оператори ref і out

У C # значення змінних за замовчуванням передаються за значенням (в метод передається локальна копія параметра, який використовується при виклику). Це означає, що ми не можемо всередині методу змінити параметр із зовні: 

 public static void ChangeValue(object a)

{
   a = 2;
}

static void Main(string[] args)
{
   int a = 1;
   ChangeValue(a);
   Console.WriteLine(a); // 1
   Console.ReadLine();
}

Щоб передавати параметри по посиланню, і мати можливість впливати на зовнішню змінну, використовуються ключові слова ref і out.

Ключове слово ref

Щоб використовувати ref, це ключове слово варто вказати перед типом параметра в методі, і перед параметром при виклику методу:

public static void ChangeValue(ref int a)
{
   a = 2;
}
static void Main(string[] args)
{
   int a = 1;
   ChangeValue(ref a);
   Console.WriteLine(a); // 2
   Console.ReadLine();
}

У цьому прикладі ми змінили значення зовнішньої змінної всередині методу.

Особливістю ref є те, що змінна, яку ми передаємо в метод, обов'язково повинна бути проініціалізувати значенням, інакше компілятор видасть помилку «Use of unassigned local variable 'a'». Це є головною відмінністю ref від out.

 Ключове слово out

Out використовується точно таким же чином як і ref, за винятком того, що параметр не зобов'язаний бути ініціалізованим першим перед передачею, але при цьому в методі переданому параметру обов'язково повинно бути присвоєно нове значення:

public static void ChangeValue(out int a)
{
   a = 2;
}
static void Main(string[] args)
{
   int a;
   ChangeValue(out a);
   Console.WriteLine(a); // 2
   Console.ReadLine();
}

Якщо не присвоїти нове значення параметру out, ми отримаємо помилку «The out parameter 'a' must be assigned to before control leaves the current method»

 Продуктивність

З огляду на той факт, що за замовчуванням в метод передаються параметри за значенням і створюються їх копії в стеці, при використанні складних типів даних (призначені для користувача структури), або якщо метод викликається багато разів, це погано позначиться на продуктивності. В такому випадку також варто використовувати ключові слова ref і out.

Якщо говорити в цілому про посилальні типи і типи значень, то продуктивність програми впаде, якщо використовувати тільки посилальні типи. На створення змінної посилального типу в купі виділяється пам'ять під дані, а в стеку під посилання на ці дані. Для типів значень пам'ять виділяється тільки в стеку. Час на розміщення даних в стеку менше, ніж в купі, це також йде в плюс типам значень в плані продуктивності.

Коментарі  

# Jacquetta 29.10.2018, 13:42
Hi. I see that you don't update your blog too often. I know that writing content is time
consuming and boring. But did you know that there is a tool that allows you to create new articles using existing
content (from article directories or other pages
from your niche)? And it does it very well. The new articles are unique and pass the copyscape
test. Search in google and try: miftolo's tools

Here is my web blog :: ShawneeJuicy: https://ClaudeSick.wix.com
Відповісти | Відповісти цитуючи | Цитата
# profile3015 01.11.2018, 15:21
Need cheap hosting? Try webhosting1st, just $10 for an year.

http://thebrachers.ch/guestbook/public/img-1539196510.jpg
Відповісти | Відповісти цитуючи | Цитата
# pulse 08.11.2018, 11:32
...кстати...Как изучить Автокад бесплатно - по профессиональному самоучителю, смотреть, читать на сайте.
Відповісти | Відповісти цитуючи | Цитата
# par 08.11.2018, 12:09
Обучение программе Автокад с нуля самостоятельно по практическому самоучителю, читайте, смотрите тут.
Відповісти | Відповісти цитуючи | Цитата
# jek 09.11.2018, 06:18
«Как научиться работать в Автокад, изучить принцип работы в программе AutoCAD с нуля и применить полученные знания в проектировании?» - бесплатный самоучитель Автокад для начинающих и уже работающих в программе будет для вас идеальным решением. Подборка видео уроков и статей для самостоятельного практического обучения Автокад на различных дисциплинах черчения. Самоучитель по AutoCAD основан на важных аспектах работы в данной системе! Обучение бесплатно, подробно, качественно здесь.
Відповісти | Відповісти цитуючи | Цитата
# fes 11.11.2018, 15:30
Как нарисовать луч в Автокад с помощью инструмента луч, смотрите, читайте на сайте.
Відповісти | Відповісти цитуючи | Цитата
# Fomia 12.11.2018, 13:39
Автокад "Сопряжение". Команда в Автокад "Сопряжение" позволит сделать скругление и сопряжение кромок двух 2D-объектов или смежных граней 3D-тела. Как сделать сопряжение и скругление углов в Автокад. Построение сопряжения с обрезкой и без обрезки концов объектов за скруглением. Как в Автокад сделать (построить) сопряжение с автоматическим скруглением всех углов полилинии, параллельных прямых, непересекающихся объектов. Циклический режим работы команды Сопряжение. Статья. Видео. Читайте, смотрите на на сайте.
Відповісти | Відповісти цитуючи | Цитата
# hib 12.11.2018, 14:58
Команда Сопряжение в Автокад. Как сделать, построить Сопряжение в Автокад, смотрите, читайте на сайте.
Відповісти | Відповісти цитуючи | Цитата
# fef 12.11.2018, 15:10
Сопряжение в Автокад. Команда в Автокад "Сопряжение" позволит сделать скругление и сопряжение кромок двух 2D-объектов или смежных граней 3D-тела. Как сделать сопряжение и скругление углов в Автокад. Построение сопряжения с обрезкой и без обрезки концов объектов за скруглением. Как в Автокад сделать (построить) сопряжение с автоматическим скруглением всех углов полилинии, параллельных прямых, непересекающихся объектов. Циклический режим работы команды Сопряжение. Статья, видео читайте, смотрите на сайте.
Відповісти | Відповісти цитуючи | Цитата
# gorse 15.11.2018, 05:27
Как в Автокад сделать, построить сопряжение угла, указать радиус сопряжения и многое другое на на сайте.
Відповісти | Відповісти цитуючи | Цитата
# Patty 20.11.2018, 23:09
What's up to all, the contents existing at this site are really remarkable for people knowledge, well, keep up the nice
work fellows.

Here is my blog post ... 123movies: https://123movies.la/tag/123moviesto
Відповісти | Відповісти цитуючи | Цитата
# Ned 21.11.2018, 04:31
Write more, thats all I have to say. Literally, it seems as though you relied on the video to make your point.
You clearly know what youre talking about, why waste
your intelligence on just posting videos to your weblog when you could be giving us something
enlightening to read?

Stop by my web blog :: 123movies: https://123movies.la/tag/123moviesto
Відповісти | Відповісти цитуючи | Цитата

Додати коментар

Захисний код
Оновити

   

Поділіться з друзями

 
   

Сайт для перевірки своїх знань з програмування на сайті:http://www.quizful.net/test

Онлайн тести  для програмістів: https://proghub.ru/


 Розробка сайтів, інтернет-магазинів під ключ. Створення програмного забезпечення для обліку в магазинах,

гуртовнях, ведення власного бізнесу та інших. Написання дипломних та курсових робіт з програмування, баз даних.

 

Звертайтесь за адресою email:kuzbyt@ukr.net

 

 

© (C) Sambir, I.Kuzbyt