C Sharp: відмінності між версіями

Матеріал з Вікіпедії — вільної енциклопедії.
Перейти до навігації Перейти до пошуку
[неперевірена версія][неперевірена версія]
Вилучено вміст Додано вміст
Рядок 38: Рядок 38:
==Стандартизація==
==Стандартизація==
Перша версія C# стандартизована в [[ECMA]] ([http://www.ecma-international.org/publications/standards/Ecma-334.htm Standard ECMA-334 C# Language Specification, 3rd edition (June 2005)]) і [[ISO]] ([http://standards.iso.org/ittf/PubliclyAvailableStandards/c036768_ISO_IEC_23270_2003(E).zip ISO/IEC 23270:2003, Information technology — C# Language Specification]). Базуючись на цій специфікації, відомо, як мінімум, про дві незалежні реалізації C#, що знаходяться в даний час на різних стадіях розробки * [[Mono development platform|Mono]], почата компанією [[Ximian]] і продовжена її покупцем і наступником [[Novell, Inc.|Novell]]. * [[dotGNU]] і [[Portable.NET]], що розробляються [[Free Software Foundation]]. Microsoft оголосила про плани зрадити публічній специфікації другу версію C#, але до теперішнього часу ця специфікація ще не отримала статус міжнародного стандарту. Існуючий стан речей ставить, таким чином, [[Microsoft]] у роль ледь не єдиної ринкової сили, що розвиває C#.
Перша версія C# стандартизована в [[ECMA]] ([http://www.ecma-international.org/publications/standards/Ecma-334.htm Standard ECMA-334 C# Language Specification, 3rd edition (June 2005)]) і [[ISO]] ([http://standards.iso.org/ittf/PubliclyAvailableStandards/c036768_ISO_IEC_23270_2003(E).zip ISO/IEC 23270:2003, Information technology — C# Language Specification]). Базуючись на цій специфікації, відомо, як мінімум, про дві незалежні реалізації C#, що знаходяться в даний час на різних стадіях розробки * [[Mono development platform|Mono]], почата компанією [[Ximian]] і продовжена її покупцем і наступником [[Novell, Inc.|Novell]]. * [[dotGNU]] і [[Portable.NET]], що розробляються [[Free Software Foundation]]. Microsoft оголосила про плани зрадити публічній специфікації другу версію C#, але до теперішнього часу ця специфікація ще не отримала статус міжнародного стандарту. Існуючий стан речей ставить, таким чином, [[Microsoft]] у роль ледь не єдиної ринкової сили, що розвиває C#.

==Версії==
===Версія 1.0===
Проєкт C# був початий в грудні 1998 і отримав кодову назву COOL (C-style Object Oriented Language). Версія 1.0 була анонсована разом з платформою .NET у червні 2000 року, тоді ж з'явилася і перша загальнодоступна бета-версія; C# 1.0 остаточно вийшов разом з Microsoft Visual Studio .NET у лютому 2002 року.

Перша версія C# нагадувала за своїми можливостями Java 1.4, дещо їх розширюючи: так, в C# були властивості (що виглядають в коді як поля об'єкту, але що на ділі викликають при зверненні до них методи класу), індексатори (подібні до властивостей, але що приймають параметр як індекс масиву), події, делегати, цикли ''foreach'', структури, що передаються по значенню, автоматичне перетворення вбудованих типів в об'єкти при необхідності (boxing), атрибути, вбудовані засоби взаємодії з некерованим кодом (DLL, COM) тощо. Крім того, в C# вирішено було перенести деякі можливості C++, відсутні в Java: беззнакові типи, перевизначення операцій (з деякими обмеженнями, на відміну від C++), передача параметрів в метод по посиланню, методи із змінним числом параметрів, оператор ''goto''. Також в C# залишили обмежену можливість роботи з вказівниками — в місцях коду, спеціально позначених словом ''unsafe'' і при вказівці спеціальній опції компілятору.

===Версія 2.0===
Проект специфікації C# 2.0 вперше був викладений Microsoft в жовтні 2003 року; у 2004 році виходили бета-версиі (проект з кодовою назвою Whidbey), C# 2.0 остаточно вийшов 7 листопада 2005 року разом з [[Visual Studio]] 2005 і .NET 2.0.

'''Нові можливості у версії 2.0''':
* Часткові типи (розділення реалізації класу більш ніж на один файл).
* Узагальнені, або параметризрвані типи (generics). На відміну від шаблонів C++, вони підтримують деякі додаткові можливості і працюють на рівні віртуальної машини. Разом з тим, параметрами узагальненого типу не можуть бути вирази.
* Нова форма ітератора, що дозволяє створювати співпрограми за допомогою ключового слова ''yield'', подібно [[Python]] і [[Рубі]].
* Анонімні методи, що забезпечують функціональність замикання.
* Оператор ??: return obj1 ?? obj2; означає (у нотації C# 1.0) return obj1!=null ? obj1 : obj2;.
* Типи-значення, що обнуляються (nullable), (що позначаються знаком питання, наприклад, int? i = null;) є тими ж самими типами-значеннями, що можуть nfrj; приймати також значення null. Такі типи дозволяють поліпшити взаємодію з базами даних через мову SQL.

===Версія 3.0===
В червні 2004 року Андерс Хейлсберг вперше розповів на сайті Microsoft про плановані розширення мови в C#3.0.<ref>http://channel9.msdn.com/ShowPost.aspx?PostID=10276</ref>. У вересні 2005 року вишли проект специфікації C# 3.0 і бета-версія C# 3.0, що встановлюється у вигляді доповнення до існуючих Visual Studio 2005 і .NET 2.0 <ref>http://msdn.microsoft.com/vcsharp/future/</ref>.


== Приклад «Hello, World» ==
== Приклад «Hello, World» ==

Версія за 20:05, 31 жовтня 2007

Правильна назва цієї сторінки — C#, але її не можна використовувати через технічні обмеження.
C#
Парадигмаоб'єктно орієнтована, структурна, імперативна
Дата появи2001
ТворціMicrosoft
РозробникАндерс Хейлсберг, Скот Вілтамут та Пітер Гольде
Останній реліз
Система типізаціїстатична, сувора, безпечна, керована
Під впливом відJava, Objective-C, C++, Visual Basic, Delphi
Вплинула наJava
Звичайні розширення файлів.cs або .csx
Репозиторій вихідного кодуgithub.com/dotnet/csharplang
github.com/dotnet/roslyn
Вебсайтdocs.microsoft.com/en-us/dotnet/csharp/

C# (вимовляється Сі-шарп) — це проста сучасна об'єктно-орієнтована та типобезпечна мова програмування для платформи .NET. Розроблена Андерсом Хейлсбергом, Скотом Вілтамутом та Пітером Гольде під егідою Microsoft Research (при фірмі Microsoft).

Синтаксис C# близький до С++ і Java. Мова має строгу статичну типізацію, підтримує поліморфізм, перевантаження операторів, покажчики на функції-члени класів, атрибути, події, властивості, винятки, коментарі у форматі XML. Перейнявши багато що від своїх попередників — мов С++, Delphi, Модула і Smalltalk — С#, спираючись на практику їх використання, виключає деякі моделі, що зарекомендували себе як проблематичні при розробці програмних систем: так, C# не підтримує множинне наслідування класів (на відміну від C++) або виведення типів (на відміну Haskell).

Історія виникнення

C# є дуже близьким родичем мови програмування Java. Мова Java була створена компанією Sun Microsystems, коли глобальний розвиток інтернета поставив задачу роззосереджених обчислень. Взявши за основу популярну мову C++, Java виключила з неї потенційно небезпечені речі (типа вказівників без конролю виходу за межі). Для роззосереджених обчислень була створена концепція віртуальної машини та машинно-незалежного байт-коду, свого рода посередника між вихідним текстом програм і апаратними інструкціями комп'ютера чи іншого інтелектульного пристрою.

Java набула чималої популярності, і була ліцензована також і компанією Microsoft. Але з плином часу Sun почала винуватити Microsoft, що та при створенні свого клону Java робить її сумісною виключно з платформою Windows, чим супепречить самій концепції машинно-незалежного середовища виконання і порушує ліцензійну угоду. Microsoft відмовилася піти назустріч вимогам Sun, і тому з'ясування стосунків набуло статусу судового процесу. Суд визнав позицію Sun справедливою, і зобов'язав Microsoft відмовитися від позаліцензійного використання Java.

У цій ситуації в Microsoft вирішили, користуючись своєю вагою на ринку, створити свій власний аналог Java, мови в якій корпорація стане повновласним господарем. Ця створена мова отримала назву C#. Вона успадкувала від Java концепції віртуальної машини (середовище .NET), байт-коду (MSIL) і більшої безпеки вихідного коду програм, плюс врахувала досвід використання програм на Java.

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

Назва мови

Символ # у назві мови можна інтерпретувати і як дві пари плюсів ++, що натякають на новий крок в розвитку мови в порівнянні з C++ (подібно до кроку від C до C++), і як музичний символ дієз, разом з буквою C що становить в англійській мові назву ноти до-дієз. Останнє і дало назву мові. Не дивлячись на те, що символ # (октоторп) насправді є символом для позначення номера на більшості клавіатур і відрізняється від символу дієз ♯ (Unicode U+266F), Microsoft, як автор мови, неодноразово зверталася до своїх клієнтів з проханням прийняти це припущення.

Особливості мови

C# розроблявся як мова програмування прикладного рівня для CLR і, як такий, залежить, перш за все, від можливостей самої CLR. Це стосується, перш за все, системи типів C#. Присутність або відсутність тих або інших виразних особливостей мови диктується тим, чи може конкретна мовна особливість бути трансльована у відповідні конструкції CLR. Так, з розвитком CLR від версії 1.1 до 2.0 значно збагатився і сам C#; подібної взаємодії слід чекати і надалі. (Проте ця закономірність буде порушена з виходом C# 3.0, що є розширеннями мови, що не спираються на розширення платформи .NET.) CLR надає C#, як і всім іншим .NET-ориєнтованим мовам, багато можливостей, яких позбавлені «класичні» мови програмування. Наприклад, збірка сміття не реалізована в самому C#, а проводиться CLR для програм, написаних на C# точно так, як і це робиться для програм на VB.NET, J# тощо.

Стандартизація

Перша версія C# стандартизована в ECMA (Standard ECMA-334 C# Language Specification, 3rd edition (June 2005)) і ISO (ISO/IEC 23270:2003, Information technology — C# Language Specification). Базуючись на цій специфікації, відомо, як мінімум, про дві незалежні реалізації C#, що знаходяться в даний час на різних стадіях розробки * Mono, почата компанією Ximian і продовжена її покупцем і наступником Novell. * dotGNU і Portable.NET, що розробляються Free Software Foundation. Microsoft оголосила про плани зрадити публічній специфікації другу версію C#, але до теперішнього часу ця специфікація ще не отримала статус міжнародного стандарту. Існуючий стан речей ставить, таким чином, Microsoft у роль ледь не єдиної ринкової сили, що розвиває C#.

Версії

Версія 1.0

Проєкт C# був початий в грудні 1998 і отримав кодову назву COOL (C-style Object Oriented Language). Версія 1.0 була анонсована разом з платформою .NET у червні 2000 року, тоді ж з'явилася і перша загальнодоступна бета-версія; C# 1.0 остаточно вийшов разом з Microsoft Visual Studio .NET у лютому 2002 року.

Перша версія C# нагадувала за своїми можливостями Java 1.4, дещо їх розширюючи: так, в C# були властивості (що виглядають в коді як поля об'єкту, але що на ділі викликають при зверненні до них методи класу), індексатори (подібні до властивостей, але що приймають параметр як індекс масиву), події, делегати, цикли foreach, структури, що передаються по значенню, автоматичне перетворення вбудованих типів в об'єкти при необхідності (boxing), атрибути, вбудовані засоби взаємодії з некерованим кодом (DLL, COM) тощо. Крім того, в C# вирішено було перенести деякі можливості C++, відсутні в Java: беззнакові типи, перевизначення операцій (з деякими обмеженнями, на відміну від C++), передача параметрів в метод по посиланню, методи із змінним числом параметрів, оператор goto. Також в C# залишили обмежену можливість роботи з вказівниками — в місцях коду, спеціально позначених словом unsafe і при вказівці спеціальній опції компілятору.

Версія 2.0

Проект специфікації C# 2.0 вперше був викладений Microsoft в жовтні 2003 року; у 2004 році виходили бета-версиі (проект з кодовою назвою Whidbey), C# 2.0 остаточно вийшов 7 листопада 2005 року разом з Visual Studio 2005 і .NET 2.0.

Нові можливості у версії 2.0:

  • Часткові типи (розділення реалізації класу більш ніж на один файл).
  • Узагальнені, або параметризрвані типи (generics). На відміну від шаблонів C++, вони підтримують деякі додаткові можливості і працюють на рівні віртуальної машини. Разом з тим, параметрами узагальненого типу не можуть бути вирази.
  • Нова форма ітератора, що дозволяє створювати співпрограми за допомогою ключового слова yield, подібно Python і Рубі.
  • Анонімні методи, що забезпечують функціональність замикання.
  • Оператор ??: return obj1 ?? obj2; означає (у нотації C# 1.0) return obj1!=null ? obj1 : obj2;.
  • Типи-значення, що обнуляються (nullable), (що позначаються знаком питання, наприклад, int? i = null;) є тими ж самими типами-значеннями, що можуть nfrj; приймати також значення null. Такі типи дозволяють поліпшити взаємодію з базами даних через мову SQL.

Версія 3.0

В червні 2004 року Андерс Хейлсберг вперше розповів на сайті Microsoft про плановані розширення мови в C#3.0.[1]. У вересні 2005 року вишли проект специфікації C# 3.0 і бета-версія C# 3.0, що встановлюється у вигляді доповнення до існуючих Visual Studio 2005 і .NET 2.0 [2].

Приклад «Hello, World»

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

Дивіться також

  1. http://channel9.msdn.com/ShowPost.aspx?PostID=10276
  2. http://msdn.microsoft.com/vcsharp/future/