Особливості C #

Класи


Класів в C #, як і в Java дуже багато. Зверніть увагу на следущий приклад,
показує використання класів:

using System;
class Hello {
static void Main() {
Console.WriteLine("Hello, world");
}
}

У цьому прикладі, ім'я System звертається до namespace, яка містить набір
базисних класів C. Namespace містить клас Console, який використовується в
цьому прикладі для виведення рядка.

Класи можуть бути абстрактними і кінцевими: клас, який оголошений як
abstract може використовуватися тільки як базовий клас. Ключове слово lock
(Аналог в Java – final) означає, що клас буде не абстрактним, але він також не
може використовуватися як основа іншого класу.

Інтерфейси


Як і в Java, інтерфейс – абстрактне визначення колекції методів. Коли
клас або структура виконує інтерфейс, він повинен виконати всі методи,
визначені в цьому інтерфейсі. Одиночний клас може виконувати ряд інтерфейсів.

Булеві операції


Прямого перетворення між булевим типом будь-яким іншим типом даних немає.
Ключовими словами є: булева істина і брехня.

Помилки


Як і в Java, управляти обробкою помилок можна захоплюючи об'єкти
винятки.

Управління пам'яттю


існує автоматична збірка "сміття", яка забезпечується. NET.



C # Особливості, запозичені у C і C + +


Компіляція


Програми виконують компіляцію безпосередньо в стандартну двійкову
здійсниму форму. Якщо попередня програма Hello World була збережена в
текстовому файлі Hello.cs, вона буде скомпільована в здійсненний файл Hello.exe.

Структури


Структури C # – подібні до структур в C + + і повинні містити визначення даних
і методи. Однак, на відміну від C + +, структури в C # відмінні від класів і не
підтримують спадкування. Однак, подібно Java, структури можуть виконувати
інтерфейси.

Препроцесор


Існують директиви препроцесора для умовної компіляції, попереджень,
помилок і контролю. Директиви попередньої обробки:

#define
#undef
#if
#elif
#else
#endif
#warning
#error
#line []

Перевантаження операторів


Деякі оператори можуть бути переобтяжені, а деякі ні. Зокрема, ні
один з операторів призначення не може бути перевантажений.

Перенавантажувані унарні оператори

+ -! ~ ++ – true false

Перенавантажувані бінарні оператори

 + – * /% І | ^ <<>> ==! => <> = <=


Особливості, унікальні для C #


Визначення у namespace


Коли ви створюєте програму, ви створюєте один або більше класів у namespace.
У ньому ж (поза класом) можливе оголошення інтерфейсів, enums і structs.
Використовуючи ключові слова ви можете адресувати вміст іншого namespace.

Фундаментальні типи даних


У C # існує більш широке розмаїття типів даних ніж в C, C + + або
Java. Типи – bool, byte, ubyte, short, ushort, int, uint, long, ulong, float,
double, and decimal. Подібно Java, всі типи мають встановлений розмір. Подібно
C і C + + всі типи можуть бути знаковими і без знаковими. Подібно Java, char
містить 16-ти бітовий unicode символ. У C # новим типом даних є тип
decimal, який може містити до 28 десяткових цифр.

Два фундаментальних класу


клас object – базовий клас всіх класів. Клас string – також базовий
клас. Будучи частиною мови він використовується компілятором, коли ви створюєте
рядок у вашій програмі, укладаючи її в лапки.

Асемблювання


Асемблювання – колекція компільованих класів і здатність до виконання
інших елементів мови, які об'єднані в окремому файлі. Якщо це
програма, файл має розширення EXE. Якщо це бібліотека – DLL.

Ознаки


Кожен член класу має ознаки: public, protected, internal, protected
internal, or private.


Проходження аргументу


Методи можуть оголошуватися для прийняття деякого числа аргументів. За
умовчанням відбувається передача значень фундаментальним типам даних. Ключове
слово ref може використовуватися для передачі значення по певному посиланню,
яка дозволяє повертати значення. Ключове слово out також викликає перехід
по посиланню без передачі значення.

Віртуальні методи


Перш, ніж метод в базовому класі буде переписаний, він повинен бути оголошений
як virtual. Метод в підкласі, який буде переписаний, повинен бути оголошений з
допомогою ключового слова override. Це запобіжить випадкову перезапис методу.
Дана особливість покращує легкість для читання і невимушеність обслуговування C #
модулів.

Властивості


COM об'єкт має властивості і тому кожен C # клас може використовуватися як
COM об'єкт. C # дозволяє визначати властивості всередині будь-якого класу. Усередині C #
класу, кожній властивості дається ім'я і тип даних. Ключові слова set accessor і
get accessor використовується для оголошення виконуваного коду при читанні або
оновленні властивості. В якості прикладу розгляньте клас, який має
властивість Caption:

public class Button: Control {
private string caption;
public string Caption {
get {
return caption;
}
set {
caption = value;
Repaint();
}
}
}

Ім'я властивості може бути адресоване зовні в затвердженні призначення:

Button b = new Button();
b.Caption = "ABC";
string s = b.Caption;
b.Caption += "DEF"

Присвоєння b.Caption викликає метод set. Присвоєння значення з b.Caption
викликає метод get. Операція + = викликає обидва цих методу. Властивість адресує
вміст окремого поля в класі.

Індексатор


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

public class ListBox: Control {
private string[] items;
public string this[int index] {
get {
return items[index];
}
set {
items[index] = value;
Repaint();
}
}
}

Iterator може використовуватися для адресації членів внутрішніх масивів:

ListBox listBox = …;
listBox[0] = "hello";
Console.WriteLine(listBox[0]);

Delegate і callback


об'єкт delegate містить інформацію, необхідну для виклику певного
методу. До об'єкту delegate можна звернутися для безпечного запиту до
представленому методу. Метод callback – приклад delegate. Ключове слово event
використовується у визначенні методів, які викликаються при виникненні
події.

Визначення версій


C # дозволяє розробникам підтримувати безліч версій класів в двійковій
формі, поміщаючи їх в різних namespace. Це дозволяє як старим, так і новим
версіями програмного забезпечення запускатися одночасно. Поряд з цим в C #
буде здатність підтримувати і управляти безліччю версій вихідного коду.

Перевірена і неперевірена оцінка


перевірене вираз – вираз, який видає виключення при виході за
його межі. Неперевірене вираз – вираз, який не видає виняток.
Ключові слова checked і unchecked використовуються для явного визначення того,
яким чином була виконана оцінка:

int j = checked(a * b);
int k = unchecked(a * b);

Явні і неявні перетворення


Подібно Java, C # враховує неявне перетворення фундаментальних типів
даних, поки немає вірогідності втрати даних (перетворення типу byte в int), але
якщо є вірогідність втрати даних (перетворення int в byte) виконується
явне перетворення. C # розширює цю здатність для інших елементів
програми, дозволяючи програмістові визначити як явні, так і неявні
перетворення. Наприклад, наступна структура Digit може бути неявно призначена
типу byte, але повинна бути явно визначена для присвоєння інший Digit:

public struct Digit {
byte value;
public Digit(byte value) {
if(value < 0 || value > 9)
throw new ArgumentException();
this.value = value;
}
public static implicit operator byte(Digit d) {
return d.value;
}
public static explicit operator Digit(byte b) {
return new Digit(b);
}
}

Зовні виконувані методи


Методи в класі можуть виконуватися зовні. У наступному прикладі, статичний
метод RemoveDirectory виконується у бібліотеці під ім'ям kernel32.dll:

class Path {
[DllImport("kernel32", setLastError=true)]
static extern bool RemoveDirectory(string name);
}

Ітерація через члени колекції


Затвердження foreach може використовуватися для одноразового виконання блоку
коду для кожного члена списку або масиву. Наступний приклад одноразово виконує
цикл в методі WriteList () для кожного члена ArrayList:

using System;
using System.Collections;
class Test {
static void WriteList(ArrayList list) {
foreach(object o in list)
Console.WriteLine(o);
}
static void Main() {
ArrayList list = new ArrayList();
for(int i = 0; i < 10; i++)
list.Add(i);
WriteList(list);
}
}


Висновок


Будь-який досвідчений Windows програміст, звичайно, знайде щось цікаве для себе
зі списку особливостей мови C #. Мені особливо подобаються властивості і здібності
індексації мови. Існують деякі нові особливості в порівнянні з Java.
Типи даних фіксованого розміру (32-х бітний int і 64-х бітний long) є
не тільки високо мобільними, але і спрощують програмування, оскільки ви завжди
знаєте точно, з чим ви маєте справу. Дуже зручною є і автоматична
"Збірка" сміття. У той час, як всі ці особливості мови здаються дуже
привабливими, ще досить рано порівнювати C # з C + + або Visual Basic.
Однак, мені подобається C # і якщо надалі послідує його гарна реалізація, то
я думаю, що. NET розробники будуть прагнути до цього нового інструменту.

Схожі статті:


Сподобалася стаття? Ви можете залишити відгук або підписатися на RSS , щоб автоматично отримувати інформацію про нові статтях.

Коментарів поки що немає.

Ваш отзыв

Поділ на параграфи відбувається автоматично, адреса електронної пошти ніколи не буде опублікований, допустимий HTML: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>

*

*