Jump to content

Си Шарп (язык программирования)

(Перенаправлено с ECMA-334 )

С#
Парадигма Мультипарадигмальность : структурированная , императивная , объектно-ориентированная , управляемая событиями , управляемая задачами , функциональная , универсальная , рефлексивная , параллельная.
Семья С
Разработано Андерс Хейлсберг ( Microsoft )
Разработчик Мадс Торгерсен ( Microsoft )
Впервые появился 2000 ; 24 года назад ( 2000 ) [ 1 ]
Стабильная версия
12.0 [ 2 ]  Отредактируйте это в Викиданных / 14 ноября 2023 г .; 8 месяцев назад ( 14 ноября 2023 г. )
Typing disciplineStatic, dynamic,[3] strong, safe, nominative, partly inferred
Memory managementautomatic memory management
PlatformCommon Language Infrastructure
License
Filename extensions.cs, .csx
Websitelearn.microsoft.com/en-us/dotnet/csharp/
Major implementations
Visual C#, .NET, Mono, Universal Windows Platform
Discontinued: .NET Framework, DotGNU
Dialects
, Polyphonic C#, Enhanced C#
Influenced by
C++,[6] , Eiffel, F#,[a] Haskell, Scala, Icon, J#, J++, Java,[6] ML, Modula-3, Object Pascal,[7] VB
Influenced
Chapel,[8] Clojure,[9] Crystal,[10] D, J#, Dart,[11] F#, Hack, Java,[12][13] Kotlin, Nemerle, Oxygene, Rust,[14] Swift,[15] Vala, TypeScript

C# ( / ˌ s ˈ ʃ ɑːr p / см. SHARP ) [ б ] — это общего назначения, высокого уровня язык программирования поддерживающий множество парадигм . C# включает статическую типизацию, [ 16 ] : 4  строгая типизация , лексическая область видимости , императивный , декларативный , функциональный , общий , [ 16 ] : 22  объектно-ориентированного ( классового ) и компонентно-ориентированного программирования. дисциплины [ 17 ]

Основными изобретателями языка программирования C# были Андерс Хейлсберг , Скотт Вильтамут и Питер Голд из Microsoft . [ 17 ] Впервые он был широко распространен в июле 2000 года. [ 17 ] и позже был одобрен в качестве международного стандарта Ecma . (ECMA-334) в 2002 году и ISO / IEC (ISO/IEC 23270 и 20619) [ с ] ) в 2003 году. Microsoft представила C# вместе с .NET Framework и Visual Studio , оба из которых имели закрытый исходный код . В то время у Microsoft не было продуктов с открытым исходным кодом. Четыре года спустя, в 2004 году, с открытым исходным кодом стартовал бесплатный проект под названием Mono , предоставляющий кроссплатформенный компилятор и среду выполнения для языка программирования C#. Десять лет спустя Microsoft выпустила Visual Studio Code (редактор кода), Roslyn (компилятор) и унифицированную платформу .NET (программная среда), все из которых поддерживают C#, являются бесплатными, с открытым исходным кодом и кроссплатформенными. Mono также присоединилась к Microsoft, но не была объединена с .NET.

As of November 2023, the most recent stable version of the language is C# 12.0, which was released in 2023 in .NET 8.0.[18][19]

Design goals

[edit]

The Ecma standard lists these design goals for C#:[17]

  • The language is intended to be a simple, modern, general-purpose, object-oriented programming language.
  • The language, and implementations thereof, should provide support for software engineering principles such as strong type checking, array bounds checking,[20]: 58–59  detection of attempts to use uninitialized variables, and automatic garbage collection.[20]: 563  Software robustness, durability, and programmer productivity are important.
  • The language is intended for use in developing software components suitable for deployment in distributed environments.
  • Portability is very important for source code and programmers, especially those already familiar with C and C++.
  • Support for internationalization[20]: 314  is very important.
  • C# is intended to be suitable for writing applications for both hosted and embedded systems, ranging from the very large that use sophisticated operating systems, down to the very small having dedicated functions.
  • Although C# applications are intended to be economical with regard to memory and processing power requirements, the language was not intended to compete directly on performance and size with C or assembly language.[21]

History

[edit]

During the development of the .NET Framework, the class libraries were originally written using a managed code compiler system named Simple Managed C (SMC).[22][23] In January 1999, Anders Hejlsberg formed a team to build a new language at the time called Cool, which stood for "C-like Object Oriented Language".[24] Microsoft had considered keeping the name "Cool" as the final name of the language, but chose not to do so for trademark reasons. By the time the .NET project was publicly announced at the July 2000 Professional Developers Conference, the language had been renamed C#, and the class libraries and ASP.NET runtime had been ported to C#.

Hejlsberg is C#'s principal designer and lead architect at Microsoft, and was previously involved with the design of Turbo Pascal, Embarcadero Delphi (formerly CodeGear Delphi, Inprise Delphi and Borland Delphi), and Visual J++. In interviews and technical papers, he has stated that flaws[25] in most major programming languages (e.g. C++, Java, Delphi, and Smalltalk) drove the fundamentals of the Common Language Runtime (CLR), which, in turn, drove the design of the C# language.

James Gosling, who created the Java programming language in 1994, and Bill Joy, a co-founder of Sun Microsystems, the originator of Java, called C# an "imitation" of Java; Gosling further said that "[C# is] sort of Java with reliability, productivity and security deleted."[26][27] In July 2000, Hejlsberg said that C# is "not a Java clone" and is "much closer to C++" in its design.[28]

Since the release of C# 2.0 in November 2005, the C# and Java languages have evolved on increasingly divergent trajectories, becoming two quite different languages. One of the first major departures came with the addition of generics to both languages, with vastly different implementations. C# makes use of reification to provide "first-class" generic objects that can be used like any other class, with code generation performed at class-load time.[29] Furthermore, C# has added several major features to accommodate functional-style programming, culminating in the LINQ extensions released with C# 3.0 and its supporting framework of lambda expressions, extension methods, and anonymous types.[30] These features enable C# programmers to use functional programming techniques, such as closures, when it is advantageous to their application. The LINQ extensions and the functional imports help developers reduce the amount of boilerplate code that is included in common tasks like querying a database, parsing an xml file, or searching through a data structure, shifting the emphasis onto the actual program logic to help improve readability and maintainability.[31]

C# used to have a mascot called Andy (named after Anders Hejlsberg). It was retired on January 29, 2004.[32]

C# was originally submitted to the ISO/IEC JTC 1 subcommittee SC 22 for review,[33] under ISO/IEC 23270:2003,[34] was withdrawn and was then approved under ISO/IEC 23270:2006.[35] The 23270:2006 is withdrawn under 23270:2018 and approved with this version.[36]

Name

[edit]

Microsoft first used the name C# in 1988 for a variant of the C language designed for incremental compilation.[37] That project was not completed, and the name was later reused.

C-sharp musical note

The name "C sharp" was inspired by the musical notation whereby a sharp symbol indicates that the written note should be made a semitone higher in pitch.[38] This is similar to the language name of C++, where "++" indicates that a variable should be incremented by 1 after being evaluated. The sharp symbol also resembles a ligature of four "+" symbols (in a two-by-two grid), further implying that the language is an increment of C++.[39]

Due to technical limits of display (standard fonts, browsers, etc.), and most keyboard layouts lacking a sharp symbol (U+266F MUSIC SHARP SIGN (♯)), the number sign (U+0023 # NUMBER SIGN (#)) was chosen to approximate the sharp symbol in the written name of the programming language.[40] This convention is reflected in the ECMA-334 C# Language Specification.[17]

The "sharp" suffix has been used by a number of other .NET languages that are variants of existing languages, including J# (a .NET language also designed by Microsoft that is derived from Java 1.1), A# (from Ada), and the functional programming language F#.[41] The original implementation of Eiffel for .NET was called Eiffel#,[42] a name retired since the full Eiffel language is now supported. The suffix has also been used for libraries, such as Gtk# (a .NET wrapper for GTK and other GNOME libraries) and Cocoa# (a wrapper for Cocoa).

Versions

[edit]
C#
version
Language specification Date .NET Visual Studio
Ecma ISO/IEC Microsoft
1.0 ECMA-334:2003, December 2002 ISO/IEC 23270:2003, April 2003 January 2002 January 2002 .NET Framework 1.0 Visual Studio .NET 2002
1.1
1.2
October 2003 April 2003 Visual Studio .NET 2003
2.0[43] ECMA-334:2006, June 2006 ISO/IEC 23270:2006, September 2006 September 2005[d] November 2005 Visual Studio 2005
Visual Studio 2008
3.0[44] None August 2007 November 2007
Visual Studio 2008
4.0[46] April 2010 April 2010 Visual Studio 2010
5.0[47] ECMA-334:2017, December 2017 ISO/IEC 23270:2018, December 2018 June 2013 August 2012 Visual Studio 2012
Visual Studio 2013
6.0[48] ECMA-334:2022, June 2022 None Draft July 2015
Visual Studio 2015
7.0[49][50] ECMA-334:2023, December 2023 ISO/IEC 20619:2023, September 2023 Specification proposal March 2017 Visual Studio 2017 version 15.0[51]
7.1[52] None Specification proposal August 2017
  • .NET Core 2.0
Visual Studio 2017 version 15.3[53]
7.2[54] Specification proposal November 2017 Visual Studio 2017 version 15.5[55]
7.3[56] Specification proposal Archived March 7, 2021, at the Wayback Machine May 2018
Visual Studio 2017 version 15.7[57]
8.0[58] Specification proposal September 2019
  • .NET Core 3.0
  • .NET Core 3.1
Visual Studio 2019 version 16.3[59]
9.0[60] Specification proposal November 2020
  • .NET 5.0
Visual Studio 2019 version 16.8[61]
10.0[62] Specification proposal November 2021
  • .NET 6.0
Visual Studio 2022 version 17.0[63]
11.0[64] Specification proposal November 2022
  • .NET 7.0
Visual Studio 2022 version 17.4[65]
12.0[66] Specification proposal November 2023
  • .NET 8.0
Visual Studio 2022 version 17.8[67]

Syntax

[edit]

The core syntax of the C# language is similar to that of other C-style languages such as C, C++ and Java, particularly:

Distinguishing features

[edit]

Some notable features of C# that distinguish it from C, C++, and Java where noted, are:

Portability

[edit]

By design, C# is the programming language that most directly reflects the underlying Common Language Infrastructure (CLI).[68] Most of its intrinsic types correspond to value-types implemented by the CLI framework. However, the language specification does not state the code generation requirements of the compiler: that is, it does not state that a C# compiler must target a Common Language Runtime, or generate Common Intermediate Language (CIL), or generate any other specific format. Some C# compilers can also generate machine code like traditional compilers of C++ or Fortran.[69][70]

Typing

[edit]

C# supports strongly, implicitly typed variable declarations with the keyword var,[16]: 470  and implicitly typed arrays with the keyword new[] followed by a collection initializer.[16]: 80 [20]: 58 

Its type system is split into two families: Value types, like the built-in numeric types and user-defined structs, which are automatically handed over as copies when used as parameters, and reference types, including arrays, instances of classes, and strings, which only hand over a pointer to the respective object. Due to their special handling of the equality operator, strings will nevertheless behave as if they were values, for all practical purposes. You can even use them as case labels. Where necessary, value types will be boxed automatically.[71]

C# supports a strict Boolean data type, bool. Statements that take conditions, such as while and if, require an expression of a type that implements the true operator, such as the Boolean type. While C++ also has a Boolean type, it can be freely converted to and from integers, and expressions such as if (a) require only that a is convertible to bool, allowing a to be an int, or a pointer. C# disallows this "integer meaning true or false" approach, on the grounds that forcing programmers to use expressions that return exactly bool can prevent certain types of programming mistakes such as if (a = b) (use of assignment = instead of equality ==).

C# is more type safe than C++. The only implicit conversions by default are those that are considered safe, such as widening of integers. This is enforced at compile-time, during JIT, and, in some cases, at runtime. No implicit conversions occur between Booleans and integers, nor between enumeration members and integers (except for literal 0, which can be implicitly converted to any enumerated type). Any user-defined conversion must be explicitly marked as explicit or implicit, unlike C++ copy constructors and conversion operators, which are both implicit by default.

C# has explicit support for covariance and contravariance in generic types,[16]: 144 [20]: 23  unlike C++ which has some degree of support for contravariance simply through the semantics of return types on virtual methods.

Enumeration members are placed in their own scope.

The C# language does not allow for global variables or functions. All methods and members must be declared within classes. Static members of public classes can substitute for global variables and functions.

Local variables cannot shadow variables of the enclosing block, unlike C and C++.

Metaprogramming

[edit]

Metaprogramming can be achieved in several ways:

  • Reflection is supported through .NET APIs, which enable scenarios such as type metadata inspection and dynamic method invocation.
  • Expression trees[72] represent code as an abstract syntax tree, where each node is an expression that can be inspected or executed. This enables dynamic modification of executable code at runtime. Expression trees introduce some homoiconicity to the language.
  • Attributes are metadata that can be attached to types, members, or entire assemblies, equivalent to annotations in Java. Attributes are accessible both to the compiler and to code through reflection. Many of native attributes duplicate the functionality of GCC's and VisualC++'s platform-dependent preprocessor directives.[citation needed]
  • System.Reflection.Emit namespace,[73] which contains classes that emit metadata and CIL (types, assemblies, etc.) at runtime.
  • The .NET Compiler Platform (Roslyn) provides API access to language compilation services, allowing for the compilation of C# code from within .NET applications. It exposes APIs for syntactic (lexical) analysis of code, semantic analysis, dynamic compilation to CIL, and code emission.[74]
  • Source generators,[75] a feature of the Roslyn C# compiler, enable compile time metaprogramming. During the compilation process, developers can inspect the code being compiled with the compiler's API and pass additional generated C# source code to be compiled.

Methods and functions

[edit]

A method in C# is a member of a class that can be invoked as a function (a sequence of instructions), rather than the mere value-holding capability of a field (i.e. class or instance variable).[76] As in other syntactically similar languages, such as C++ and ANSI C, the signature of a method is a declaration comprising in order: any optional accessibility keywords (such as private), the explicit specification of its return type (such as int, or the keyword void if no value is returned), the name of the method, and finally, a parenthesized sequence of comma-separated parameter specifications, each consisting of a parameter's type, its formal name and optionally, a default value to be used whenever none is provided. Different from most other languages, call-by-reference parameters have to be marked both at the function definition and at the calling site, and you can choose between ref and out, the latter allowing handing over an uninitialized variable which will have a definite value on return.[77] Additionally, you can specify a variable-sized argument list by applying the params keyword to the last parameter.[78] Certain specific kinds of methods, such as those that simply get or set a field's value by returning or assigning it, do not require an explicitly stated full signature, but in the general case, the definition of a class includes the full signature declaration of its methods.[79]

Like C++, and unlike Java, C# programmers must use the scope modifier keyword virtual to allow methods to be overridden by subclasses. Unlike C++, you have to explicitly specify the keyword override when doing so.[80] This is supposed to avoid confusion between overriding and newly overloading a function (i.e. hiding the former implementation). To do the latter, you have to specify the new keyword.[81]

Extension methods in C# allow programmers to use static methods as if they were methods from a class's method table, allowing programmers to virtually add instance methods to a class that they feel should exist on that kind of objects (and instances of the respective derived classes).[16]: 103–105 [20]: 202–203 

The type dynamic allows for run-time method binding, allowing for JavaScript-like method calls and run-time object composition.[16]: 114–118 

C# has support for strongly-typed function pointers via the keyword delegate. Like the Qt framework's pseudo-C++ signal and slot, C# has semantics specifically surrounding publish-subscribe style events, though C# uses delegates to do so.

C# offers Java-like synchronized method calls, via the attribute [MethodImpl(MethodImplOptions.Synchronized)], and has support for mutually-exclusive locks via the keyword lock.

Property

[edit]

C# supports classes with properties. The properties can be simple accessor functions with a backing field, or implement arbitrary getter and setter functions. A property is read-only if there's no setter. Like with fields, there can be class and instance properties. The underlying methods can be virtual or abstract like any other method.[79]

Начиная с C# 3.0 синтаксический сахар автоматически реализуемых свойств. доступен [82] where the accessor (getter) and mutator (setter) encapsulate operations on a single attribute of a class.

Пространство имен

[ редактировать ]

AC# namespace обеспечивает тот же уровень изоляции кода, что и Java. package или С++ namespace, с очень похожими правилами и функциями package. Пространства имен можно импортировать с помощью синтаксиса «using». [ 83 ]

Доступ к памяти

[ редактировать ]

В C# указатели адресов памяти можно использовать только внутри блоков, специально помеченных как небезопасные . [ 84 ] а программам с небезопасным кодом для запуска необходимы соответствующие разрешения. Большая часть доступа к объектам осуществляется через безопасные ссылки на объекты, которые всегда либо указывают на «живой» объект, либо имеют четко определенное нулевое значение; невозможно получить ссылку на «мертвый» объект (который был собран сборщиком мусора) или на случайный блок памяти. Небезопасный указатель может указывать на экземпляр неуправляемого типа значения, который не содержит никаких ссылок на объекты, подлежащие сборке мусора, такие как экземпляры классов, массивы или строки. Код, который не помечен как небезопасный, все равно может хранить указатели и манипулировать ими через System.IntPtr type, но он не может их разыменовать.

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

Исключения

[ редактировать ]

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

Синтаксис обработки исключений: try { что-нибудь } catch (Exception ex) { ручка ex } finally { сделать что-то независимо от того, произошло исключение или нет }. В зависимости от ваших планов, часть «catch» или «finally» может быть опущена, и может быть несколько частей «catch», обрабатывающих различные виды исключений. [ 86 ]

Проверяемые исключения отсутствуют в C# (в отличие от Java). Это было сознательное решение, основанное на вопросах масштабируемости и версионности. [ 87 ]

Полиморфизм

[ редактировать ]

В отличие от C++ , C# не поддерживает множественное наследование , хотя класс может реализовывать любое количество « интерфейсов » (полностью абстрактных классов). Это было дизайнерское решение ведущего архитектора языка, призванное избежать сложностей и упростить архитектурные требования для всего интерфейса командной строки.

При реализации нескольких интерфейсов, содержащих метод с одинаковым именем и принимающих параметры одного и того же типа в одном и том же порядке (т. е. одной и той же сигнатуры ), подобно Java , C# позволяет как один метод охватывать все интерфейсы, так и, при необходимости, конкретные методы для каждый интерфейс.

Однако, в отличие от Java, C# поддерживает перегрузку операторов . [ 88 ]

C# также предлагает перегрузку функций (так называемый специальный полиморфизм). [ 89 ]

Начиная с версии 2.0, C# предлагает параметрический полиморфизм , то есть классы с произвольными или ограниченными параметрами типа, например List<T>, массив переменного размера, который может содержать только элементы типа T. Существуют определенные виды ограничений, которые вы можете указать для параметров типа: должен быть тип X ( или производный от него ), должен реализовывать определенный интерфейс, должен быть ссылочным типом, должен быть типом значения, должен быть реализовать общедоступный конструктор без параметров . Большинство из них можно комбинировать, и вы можете указать любое количество интерфейсов. [ 90 ] [ 91 ]

Языковой интегрированный запрос (LINQ)

[ редактировать ]

C# имеет возможность использовать LINQ через .NET Framework. Разработчик может запрашивать различные источники данных при условии, что IEnumerable<T> интерфейс реализован на объекте. Сюда входят документы XML, набор данных ADO.NET и базы данных SQL. [ 92 ]

Использование LINQ в C# дает такие преимущества, как поддержка IntelliSense , широкие возможности фильтрации, безопасность типов с возможностью проверки ошибок компиляции и согласованность запросов данных из различных источников. [ 93 ] Существует несколько различных языковых структур, которые можно использовать с C# и LINQ, и это выражения запросов, лямбда-выражения, анонимные типы, неявно типизированные переменные, методы расширения и инициализаторы объектов. [ 94 ]

LINQ имеет два синтаксиса: синтаксис запроса и синтаксис метода. Однако компилятор всегда преобразует синтаксис запроса в синтаксис метода во время компиляции. [ 95 ]

using System.Linq;

var numbers = new int[] { 5, 10, 8, 3, 6, 12 };

// Query syntax (SELECT num FROM numbers WHERE num % 2 = 0 ORDER BY num)
var numQuery1 =
        from num in numbers
        where num % 2 == 0
        orderby num
        select num;

// Method syntax
var numQuery2 = 
        numbers
        .Where(num => num % 2 == 0)
        .OrderBy(n => n);

Функциональное программирование

[ редактировать ]

Хотя C# в первую очередь является императивным языком, со временем в него всегда добавляются функциональные возможности. [ 96 ] [ 97 ] например:

Система общего типа

[ редактировать ]

В C# имеется единая система типов . Эта унифицированная система типов называется системой общих типов (CTS). [ 104 ] : Часть 2, Глава 4: Система типов

Единая система типов подразумевает, что все типы, включая примитивы, такие как целые числа, являются подклассами System.Object сорт. Например, каждый тип наследует ToString() метод.

Категории типов данных

[ редактировать ]

CTS разделяет типы данных на две категории: [ 104 ]

  1. Типы ссылок
  2. Типы значений

Экземпляры типов значений не имеют ни ссылочной идентичности, ни семантики ссылочного сравнения. Сравнения равенства и неравенства для типов значений сравнивают фактические значения данных внутри экземпляров, если только соответствующие операторы не перегружены. Типы значений происходят от System.ValueType, всегда имеют значение по умолчанию и всегда могут быть созданы и скопированы. Некоторые другие ограничения типов значений заключаются в том, что они не могут быть производными друг от друга (но могут реализовывать интерфейсы) и не могут иметь явный конструктор по умолчанию (без параметров), поскольку у них уже есть неявный конструктор, который инициализирует все содержащиеся данные зависимым от типа значением по умолчанию ( 0, ноль или подобное). Примерами типов значений являются все примитивные типы, такие как int (32-битное целое число со знаком), float (32-битное число IEEE с плавающей запятой), char (16-битный код Unicode), decimal (числа с фиксированной точкой, полезные для обработки денежных сумм) и System.DateTime (определяет конкретный момент времени с точностью до наносекунды). Другими примерами являются enum (перечисления) и struct (структуры, определяемые пользователем).

Напротив, ссылочные типы имеют понятие ссылочной идентичности, что означает, что каждый экземпляр ссылочного типа по своей сути отличается от любого другого экземпляра, даже если данные в обоих экземплярах одинаковы. Это отражается в сравнениях равенства и неравенства по умолчанию для ссылочных типов, которые проверяют ссылочное, а не структурное равенство, если только соответствующие операторы не перегружены (например, в случае с System.String). Некоторые операции не всегда возможны, например создание экземпляра ссылочного типа, копирование существующего экземпляра или сравнение значений двух существующих экземпляров. Тем не менее, определенные ссылочные типы могут предоставлять такие услуги, предоставляя открытый конструктор или реализуя соответствующий интерфейс (например, ICloneable или IComparable). Примеры ссылочных типов: object (основной базовый класс для всех остальных классов C#), System.String (строка символов Юникода) и System.Array (базовый класс для всех массивов C#).

Обе категории типов можно расширять с помощью определяемых пользователем типов.

Упаковка и распаковка

[ редактировать ]

Упаковка — это операция преобразования объекта типа значения в значение соответствующего ссылочного типа. [ 104 ] Упаковка в C# является неявной.

Распаковка — это операция преобразования значения ссылочного типа (ранее упакованного) в значение типа значения. [ 104 ] Распаковка в C# требует явного приведения типа . Упакованный объект типа T можно распаковать только до T (или T, допускающего значение NULL). [ 105 ]

Пример:

int foo = 42;         // Value type.
object bar = foo;     // foo is boxed to bar.
int foo2 = (int)bar;  // Unboxed back to value type.

Библиотеки

[ редактировать ]

Спецификация C# подробно описывает минимальный набор типов и библиотек классов, которые компилятор ожидает иметь. На практике C# чаще всего используется с некоторой реализацией Common Language Infrastructure (CLI), которая стандартизирована как ECMA-335 Common Language Infrastructure (CLI) .

В дополнение к стандартным спецификациям CLI существует множество коммерческих и общественных библиотек классов, которые созданы на основе библиотек платформы .NET и предоставляют дополнительные функциональные возможности. [ 106 ]

C# может выполнять вызовы к любой библиотеке, включенной в Список библиотек и платформ .NET .

Привет, мир

[ редактировать ]

Ниже приведена очень простая программа на C#, версия классического примера « Привет, мир », использующая функцию операторов верхнего уровня, представленную в C# 9: [ 107 ]

using System;

Console.WriteLine("Hello, world!");

Для кода, написанного на C# 8 или ниже, логика точки входа программы должна быть записана в методе Main внутри типа:

using System;

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

Этот код отобразит этот текст в окне консоли:

Hello, world!

Каждая строка имеет свое назначение:

using System;

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

// A version of the classic "Hello World" program

Эта строка является комментарием; он описывает и документирует код для программиста(ов).

class Program

Выше приведено определение класса для Program сорт. Все, что следует за парой фигурных скобок, описывает этот класс.

{
    ...
}

Фигурные скобки обозначают границы блока кода. В этом первом случае они отмечают начало и конец Program сорт.

static void Main()

Здесь объявляется метод члена класса, с которого программа начинает выполнение. Среда выполнения .NET вызывает Main метод. В отличие от Java , Main метод не требует public ключевое слово, которое сообщает компилятору, что метод может быть вызван из любого места любым классом. [ 108 ] Письмо static void Main(string[] args) эквивалентно написанию private static void Main(string[] args). Ключевое слово static делает метод доступным без экземпляра Program. Каждое консольное приложение Main точка входа должна быть объявлена static в противном случае программе потребуется экземпляр Program, но для любого экземпляра потребуется программа. Чтобы избежать этой неразрешимой циклической зависимости , компиляторы C#, обрабатывающие консольные приложения (как показано выше), сообщают об ошибке, если нет static Main метод. void Ключевое слово заявляет, что Main не имеет возвращаемого значения . (Однако обратите внимание, что короткие программы могут быть написаны с использованием операторов верхнего уровня, представленных в C# 9, как упоминалось ранее.)

Console.WriteLine("Hello, world!");

Эта строка записывает вывод. Console это статический класс в System пространство имен. Он обеспечивает интерфейс для стандартного ввода/вывода и потоки ошибок для консольных приложений. Программа вызывает Console метод WriteLine, который выводит на консоль строку с аргументом, строку "Hello, world!".

Дженерики

[ редактировать ]

Благодаря .NET 2.0 и C# 2.0 сообщество получило более гибкие коллекции, чем в .NET 1.x. Из-за отсутствия дженериков разработчикам приходилось использовать такие коллекции, как ArrayList, для хранения элементов как объектов неопределенного типа, что приводило к снижению производительности при упаковке/распаковке/проверке типа содержащихся элементов.

Generics представили новую масштабную функцию в .NET, которая позволила разработчикам создавать типобезопасные структуры данных. Этот сдвиг особенно важен в контексте преобразования устаревших систем, где обновление универсальных структур может значительно повысить производительность и удобство обслуживания за счет замены устаревших структур данных более эффективными и типобезопасными альтернативами. [ 109 ]

Пример

public class DataStore<T>
{
    private T[] items = new T[10];
    private int count = 0;

    public void Add(T item)
    {
        items[count++] = item;
    }

    public T Get(int index)
    {
        return items[index];
    }
}

графический интерфейс

[ редактировать ]

Windows Пример графического интерфейса :

using System;
using System.Windows.Forms;

class Program
{
    static void Main()
    {
        MessageBox.Show("Hello, World!");
        Console.WriteLine("Is almost the same argument!");
    }
}

Этот пример аналогичен предыдущему, за исключением того, что он создает диалоговое окно , содержащее сообщение «Hello, World!» вместо того, чтобы писать его в консоль.

Изображения

[ редактировать ]

Еще одна полезная библиотека — System.Drawing библиотека, которая используется для программного рисования изображений. Например:

using System;
using System.Drawing;

public class Example
{
    public static Image img;

    static void Main()
    {
        img = Image.FromFile("Image.png");
    }
}

Это создаст изображение, идентичное изображению, хранящемуся в «Image.png».

Стандартизация и лицензирование

[ редактировать ]

В августе 2001 года Microsoft , Hewlett-Packard и Intel совместно выступили спонсорами подачи спецификаций C#, а также Common Language Infrastructure (CLI) в организацию по стандартизации Ecma International . В декабре 2001 года ECMA выпустила спецификацию языка C# ECMA-334 . C# стал стандартом ISO / IEC в 2003 году (ISO/IEC 23270:2003 – Информационные технологии. Языки программирования – C# ). ECMA ранее приняла эквивалентные спецификации в качестве второго издания C# в декабре 2002 года. В июне 2005 года ECMA утвердила третье издание спецификации C# и обновила ECMA-334. Дополнения включали частичные классы, анонимные методы, типы, допускающие значение NULL, и дженерики C++ (что-то похожее на шаблоны ). В июле 2005 года ECMA представила ISO/IEC JTC 1/SC 22, используя ускоренный процесс последнего, стандарты и соответствующие ТУ. Обычно этот процесс занимает 6–9 месяцев.

Определение языка C# и CLI стандартизированы в соответствии со стандартами ISO / IEC и Ecma , которые обеспечивают разумную и недискриминационную лицензионную защиту от патентных претензий.

Microsoft изначально согласилась не подавать в суд на разработчиков открытого исходного кода за нарушение патентов в некоммерческих проектах на ту часть фреймворка, на которую распространяется обещание открытой спецификации . [ 110 ] Microsoft также согласилась не применять патенты, относящиеся к продуктам Novell , к платящим клиентам Novell. [ 111 ] за исключением списка продуктов, в которых явно не упоминаются C#, .NET или реализация .NET от Novell ( Проект Mono ). [ 112 ] Однако Novell утверждает, что Mono не нарушает никаких патентов Microsoft. [ 113 ] Microsoft также заключила конкретное соглашение не обеспечивать соблюдение патентных прав, связанных с плагином браузера Moonlight , который зависит от Mono, при условии, что он будет получен через Novell. [ 114 ]

Десять лет спустя Microsoft начала разработку бесплатных кроссплатформенных инструментов с открытым исходным кодом для C#, а именно Visual Studio Code , .NET Core и Roslyn . Mono присоединился к Microsoft как проект Xamarin , дочерней компании Microsoft.

Реализации

[ редактировать ]

Microsoft возглавляет разработку эталонных открытым исходным кодом компиляторов C# и набора инструментов с . Первый компилятор, Roslyn , компилирует в промежуточный язык (IL), а второй, RyuJIT, [ 115 ] — это JIT-компилятор (точно в срок), который является динамическим, выполняет оптимизацию «на лету» и компилирует IL в собственный код для внешнего интерфейса ЦП. [ 116 ] RyuJIT имеет открытый исходный код и написан на C++. [ 117 ] Roslyn полностью написан на управляемом коде (C#), открыт, а его функциональные возможности реализованы в виде API. Таким образом, это позволяет разработчикам создавать инструменты рефакторинга и диагностики. [ 4 ] [ 118 ] Двумя ветвями официальной реализации являются .NET Framework (с закрытым исходным кодом, только для Windows) и .NET Core (с открытым исходным кодом, кроссплатформенный); в конечном итоге они объединились в одну реализацию с открытым исходным кодом: .NET 5.0. [ 119 ] В .NET Framework 4.6 новый JIT-компилятор заменил прежний. [ 115 ] [ 120 ]

Другие компиляторы C# (некоторые из которых включают реализацию Common Language Infrastructure и библиотек классов .NET):

  • Mono , проект, спонсируемый Microsoft, предоставляет компилятор C# с открытым исходным кодом, полную реализацию CLI с открытым исходным кодом (включая необходимые библиотеки платформы, как они указаны в спецификации ECMA) и почти полную реализацию библиотек классов NET. в .NET Framework 3.5.
  • Цепочка инструментов Elements из RemObjects включает RemObjects C#, который компилирует код C# в .NET Common Intermediate Language , байт-код Java , Cocoa , байт-код Android , WebAssembly и собственный машинный код для Windows, macOS и Linux.
  • Проект DotGNU (сейчас прекращенный) также предоставил компилятор C# с открытым исходным кодом, почти полную реализацию Common Language Infrastructure, включая необходимые библиотеки платформы, как они указаны в спецификации ECMA, и подмножество некоторых оставшихся собственных классов .NET Microsoft. библиотеки до .NET 2.0 (те, которые не задокументированы и не включены в спецификацию ECMA, но включены в стандартный дистрибутив Microsoft .NET Framework).

использует Игровой движок Unity C# в качестве основного языка сценариев. В игровой движок Godot реализован дополнительный модуль C# благодаря пожертвованию Microsoft в размере 24 000 долларов. [ 121 ]

См. также

[ редактировать ]

Примечания

[ редактировать ]
  1. ^ для асинхронности
  2. ^ По соглашению числовой знак для второго символа в обычном тексте используется настоящий диез ; в художественных изображениях иногда употребляется : C♯. Однако стандарт ECMA 334 гласит: «Имя C# записывается как ЛАТИНСКАЯ ЗАГЛАВНАЯ БУКВА C (U+0043), за которой следует ЦИФРОВОЙ ЗНАК # (U+0023)».
  3. ^ Языковые версии 1.0, 2.0 и 5.0 доступны как ISO/IEC 23270. Начиная с версии 7.0, спецификация доступна как ISO/IEC 20619.
  4. ^ Документ спецификации Microsoft C# 2.0 содержит только новые функции 2.0. Для более старых функций используйте приведенную выше спецификацию 1.2.
  1. ^ «InfoQ eMag: предварительный обзор C# 7» . Архивировано из оригинала 24 апреля 2023 года . Проверено 11 ноября 2016 г.
  2. ^ «Анонсируем C# 12» . Проверено 18 ноября 2023 г.
  3. ^ Торгерсен, Мадс (27 октября 2008 г.). «Новые возможности C# 4.0» . Майкрософт . Архивировано из оригинала 3 января 2012 года . Проверено 28 октября 2008 г.
  4. ^ Перейти обратно: а б «Компилятор Roslyn .NET предоставляет языкам C# и Visual Basic богатые API-интерфейсы анализа кода.: dotnet/roslyn» . 13 ноября 2019 года. Архивировано из оригинала 22 февраля 2021 года . Получено 13 февраля 2015 г. - через GitHub.
  5. ^ «CoreCLR — это среда выполнения для .NET Core. Она включает в себя сборщик мусора, JIT-компилятор, примитивные типы данных и классы низкого уровня.: dotnet/coreclr» . 13 ноября 2019 года. Архивировано из оригинала 14 октября 2019 года . Получено 8 марта 2017 г. - через GitHub.
  6. ^ Перейти обратно: а б Науглер, Дэвид (май 2007 г.). «C# 2.0 для программиста C++ и Java: семинар-конференция». Журнал вычислительной техники в колледжах . 22 (5). Хотя C# находился под сильным влиянием Java, на него также сильно повлиял C++, и его лучше всего рассматривать как потомка C++ и Java.
  7. ^ Гамильтон, Наоми (1 октября 2008 г.). «Языки программирования: C#» . Компьютерный мир . Архивировано из оригинала 24 марта 2010 года . Проверено 12 февраля 2010 г. Здесь мы все стоим на плечах гигантов, и каждый язык основан на том, что было до него, поэтому мы во многом обязаны C, C++, Java, Delphi и всем остальным, что было до нас. ( Андерс Хейлсберг )
  8. ^ «Спецификация часовни (Благодарность)» (PDF) . Cray Inc., 1 октября 2015 г. Архивировано из оригинала (PDF) 5 февраля 2016 г. . Проверено 14 января 2016 г.
  9. ^ «Вопросы и ответы Рича Хикки от Майкла Фогуса» . Архивировано из оригинала 11 января 2017 года . Проверено 11 января 2017 г.
  10. ^ Боренцвейг, Ари (14 июня 2016 г.). «Выпущен Кристалл 0.18.0!» . Архивировано из оригинала 25 декабря 2018 года . Проверено 7 августа 2017 г. Он во многом вдохновлен Ruby и другими языками (например, C#, Go и Python).
  11. ^ «Веб-языки и виртуальные машины: быстрый код всегда в моде. (V8, Dart) — Google I/O 2013» . Ютуб . Архивировано из оригинала 21 декабря 2021 года . Проверено 22 декабря 2013 г.
  12. ^ В Java 5.0 добавлено несколько новых функций языка ( улучшенный цикл for , автобоксинг , varargs и аннотации ) после того, как они были представлены в аналогичном (и конкурирующем) языке C# [1]. Архивировано 19 марта 2011 г. на Wayback Machine [2]. Архивировано 7 января 2006 г. в Wayback Machine.
  13. ^ Корнелиус, Барри (1 декабря 2005 г.). «Java 5 догоняет C#» . Оксфордского университета Вычислительные службы . Архивировано из оригинала 6 марта 2023 года . Проверено 18 июня 2014 г. По моему мнению, именно C# стал причиной таких радикальных изменений в языке Java. ( Барри Корнелиус )
  14. ^ «Влияния — Справочник по ржавчине» . Справочник по ржавчине . Архивировано из оригинала 26 января 2019 года . Проверено 18 апреля 2023 г.
  15. ^ Латтнер, Крис (3 июня 2014 г.). «Домашняя страница Криса Лэттнера» . Крис Лэттнер. Архивировано из оригинала 25 декабря 2018 года . Проверено 12 мая 2020 г. Язык Swift — это продукт неустанных усилий команды языковых экспертов, гуру документации, ниндзя по оптимизации компиляторов и невероятно важной внутренней экспериментальной группы, которая предоставляла отзывы, помогающие совершенствовать и проверять идеи. Конечно, он также получил большую пользу от опыта, с трудом полученного многими другими языками в этой области, черпая идеи из Objective-C, Rust, Haskell, Ruby, Python, C#, CLU и многих других, чтобы их перечислять.
  16. ^ Перейти обратно: а б с д и ж г Скит 2019 .
  17. ^ Перейти обратно: а б с д и Спецификация языка C# (PDF) (4-е изд.). Экма Интернешнл . Июнь 2006 г. Архивировано (PDF) из оригинала 21 апреля 2021 г. Проверено 26 января 2012 г.
  18. ^ Доллард, Кэтлин (14 ноября 2023 г.). «Анонсируем C# 12» . .NET-блог . Архивировано из оригинала 18 ноября 2023 года . Проверено 18 ноября 2023 г.
  19. ^ Сет, Гаурав (14 ноября 2023 г.). «Анонс .NET 8» . .NET-блог . Архивировано из оригинала 19 ноября 2023 года . Проверено 18 ноября 2023 г.
  20. ^ Перейти обратно: а б с д и ж Альбахари 2022 .
  21. ^ «Цели проектирования C#» . www.java-samples.com . Архивировано из оригинала 6 октября 2021 года . Проверено 6 октября 2021 г.
  22. ^ Зандер, Джейсон (22 ноября 2007 г.). «Пара исторических фактов» . Архивировано из оригинала 29 июля 2020 года . Проверено 23 февраля 2009 г.
  23. ^ «На каком языке изначально был написан ASP.Net?» . 28 ноября 2006 г. Архивировано из оригинала 24 июня 2016 г. Проверено 21 февраля 2008 г.
  24. ^ Гамильтон, Наоми (1 октября 2008 г.). «Языки программирования: C#» . Компьютерный мир . Архивировано из оригинала 18 мая 2019 года . Проверено 1 октября 2008 г.
  25. ^ "Подробности" . nilsnaegele.com . Архивировано из оригинала 7 апреля 2019 года . Проверено 7 апреля 2019 г.
  26. ^ «Почему Microsoft C# нет» . vrenture.com/: CBS Interactive. 2002. Архивировано из оригинала 14 августа 2023 года . Проверено 18 сентября 2023 г.
  27. ^ Билл Джой (7 февраля 2002 г.). «Слепое пятно Microsoft» . cnet.com. Архивировано из оригинала 14 августа 2023 года . Проверено 18 сентября 2023 г.
  28. ^ Осборн, Джон (1 августа 2000 г.). «Глубоко внутри C#: интервью с главным архитектором Microsoft Андерсом Хейлсбергом» . О'Рейли Медиа. Архивировано из оригинала 9 января 2010 года . Проверено 14 ноября 2009 г.
  29. ^ «Обобщенные шаблоны (Руководство по программированию на C#)» . Майкрософт. Архивировано из оригинала 26 августа 2011 года . Проверено 21 марта 2011 г.
  30. ^ Дон Бокс и Андерс Хейлсберг (февраль 2007 г.). «LINQ: запрос, интегрированный в язык .NET» . Майкрософт. Архивировано из оригинала 24 августа 2011 года . Проверено 21 марта 2011 г.
  31. ^ Мерсер, Ян (15 апреля 2010 г.). «Почему функциональное программирование и LINQ часто лучше процедурного кода» . abodit.com. Архивировано из оригинала 11 июля 2011 года . Проверено 21 марта 2011 г.
  32. ^ «Энди уходит на пенсию» . Блог Дэна Фернандеса . Блоги.msdn.com. 29 января 2004 года. Архивировано из оригинала 19 января 2016 года . Проверено 4 октября 2012 г.
  33. ^ «Технические комитеты — JTC 1/SC 22 — Языки программирования, их среды и интерфейсы системного программного обеспечения» . ИСО. Архивировано из оригинала 27 сентября 2012 года . Проверено 4 октября 2012 г.
  34. ^ «ISO/IEC 23270:2003 – Информационные технологии – Спецификация языка C#» . Исо.орг. 23 августа 2006. Архивировано из оригинала 8 мая 2012 года . Проверено 4 октября 2012 г.
  35. ^ «ISO/IEC 23270:2006 – Информационные технологии – Языки программирования – C#» . Исо.орг. 26 января 2012. Архивировано из оригинала 6 декабря 2010 года . Проверено 4 октября 2012 г.
  36. ^ «SO/IEC 23270:2018 Информационные технологии. Языки программирования. C#» . ИСО . Проверено 26 ноября 2020 г.
  37. ^ Мариани, Рико (5 октября 2009 г.). «Моя история Visual Studio (Часть 1) – Интересные факты о производительности Рико Мариани» . Интересные факты о выступлении Рико Мариани . Архивировано из оригинала 27 мая 2018 года . Проверено 26 мая 2018 г.
  38. ^ Ковач, Джеймс (7 сентября 2007 г.). «Урок истории C#/.NET» . Архивировано из оригинала 6 марта 2009 года . Проверено 18 июня 2009 г.
  39. ^ Хейлсберг, Андерс (1 октября 2008 г.). «Языки программирования: C#» . Компьютерный мир . Архивировано из оригинала 2 апреля 2015 года . Проверено 22 июня 2014 г.
  40. ^ «Часто задаваемые вопросы по Microsoft C#» . Майкрософт . Архивировано из оригинала 14 февраля 2006 года . Проверено 25 марта 2008 г.
  41. ^ «Часто задаваемые вопросы по F#» . Исследования Майкрософт. Архивировано из оригинала 18 февраля 2009 года . Проверено 18 июня 2009 г.
  42. ^ Саймон, Рафаэль; Стапф, Эммануэль; Мейер, Бертран (июнь 2002 г.). «Полный Эйфель на .NET Framework» . Майкрософт . Архивировано из оригинала 21 июля 2009 года . Проверено 18 июня 2009 г.
  43. ^ «Что нового в языке и компиляторе C# 2.0» . Майкрософт. Архивировано из оригинала 18 декабря 2010 года . Проверено 11 июня 2014 г.
  44. ^ Хейлсберг, Андерс; Торгерсен, Мадс (30 апреля 2007 г.). «Обзор C# 3.0» . Сеть разработчиков Microsoft . Майкрософт. Архивировано из оригинала 25 июня 2014 года . Проверено 11 июня 2014 г.
  45. ^ Перейти обратно: а б «Использование C# 3.0 из .NET 2.0» . Дэниелмот.com. 13 мая 2007 года. Архивировано из оригинала 29 сентября 2012 года . Проверено 4 октября 2012 г.
  46. ^ Хейлсберг, Андерс (15 сентября 2011 г.). «Будущие направления развития C# и Visual Basic» . Канал 9 . СТРОЙ2011. Майкрософт. Архивировано из оригинала 23 сентября 2011 года . Проверено 21 сентября 2011 г.
  47. ^ «Введение в новые возможности C# 5.0» . Блог программы Microsoft MVP Award . Майкрософт. 26 марта 2012. Архивировано из оригинала 4 июня 2014 года . Проверено 11 июня 2014 г.
  48. ^ «Функции языков в C# 6 и VB 14» . Гитхаб . дотнет/рослин. Архивировано из оригинала 12 января 2016 года . Проверено 13 февраля 2015 г.
  49. ^ «Что нового в C# 7» . Документы Майкрософт . 21 декабря 2016 г. Архивировано из оригинала 1 ноября 2017 г.
  50. ^ Торгерсен, Мадс (9 марта 2017 г.). «Новые возможности C# 7.0» . .NET-блог . Майкрософт. Архивировано из оригинала 11 апреля 2017 года . Проверено 9 июня 2017 г.
  51. ^ «Примечания к выпуску Visual Studio 2017 версии 15.0» . Microsoft Learn . 11 апреля 2023 года. Архивировано из оригинала 20 апреля 2023 года . Проверено 19 апреля 2023 г.
  52. ^ «Что нового в C# 7.1» . Документы Майкрософт . Архивировано из оригинала 10 октября 2017 года . Проверено 9 октября 2017 г.
  53. ^ «Примечания к выпуску Visual Studio 2017 версии 15.3» . Microsoft Learn . 11 апреля 2023 года. Архивировано из оригинала 21 марта 2023 года . Проверено 19 апреля 2023 г.
  54. ^ «Что нового в C# 7.2» . Документы Майкрософт . Архивировано из оригинала 1 декабря 2017 года . Проверено 26 ноября 2017 г.
  55. ^ «Примечания к выпуску Visual Studio 2017 версии 15.5» . Microsoft Learn . 11 апреля 2023 года. Архивировано из оригинала 20 апреля 2023 года . Проверено 19 апреля 2023 г.
  56. ^ «Что нового в C# 7.3» . Документы Майкрософт . Архивировано из оригинала 23 июня 2018 года . Проверено 23 июня 2018 г.
  57. ^ «Примечания к выпуску Visual Studio 2017 версии 15.7» . Microsoft Learn . 13 июля 2022 года. Архивировано из оригинала 20 апреля 2023 года . Проверено 19 апреля 2023 г.
  58. ^ «Что нового в C# 8.0» . Документы Майкрософт . 9 марта 2023 года. Архивировано из оригинала 6 сентября 2020 года . Проверено 14 апреля 2019 г.
  59. ^ «Примечания к выпуску Visual Studio 2019 версии 16.3» . Microsoft Learn . 11 апреля 2023 года. Архивировано из оригинала 20 апреля 2023 года . Проверено 19 апреля 2023 г.
  60. ^ БиллВагнер. «Что нового в C# 9.0 — Руководство по C#» . Microsoft Learn . Архивировано из оригинала 5 сентября 2020 года . Проверено 15 октября 2020 г.
  61. ^ «Примечания к выпуску Visual Studio 2019 версии 16.8» . Microsoft Learn . 11 апреля 2023 года. Архивировано из оригинала 20 апреля 2023 года . Проверено 19 апреля 2023 г.
  62. ^ «Что нового в C# 10» . Microsoft Learn . Архивировано из оригинала 8 февраля 2022 года . Проверено 10 ноября 2021 г.
  63. ^ «Примечания к выпуску Visual Studio 2022 версии 17.0» . Microsoft Learn . Архивировано из оригинала 16 июля 2023 года . Проверено 19 апреля 2023 г.
  64. ^ «Что нового в C# 11» . Microsoft Learn . Архивировано из оригинала 15 августа 2022 года . Проверено 8 августа 2022 г.
  65. ^ «Примечания к выпуску Visual Studio 2022 версии 17.4» . Microsoft Learn . Архивировано из оригинала 6 августа 2023 года . Проверено 19 апреля 2023 г.
  66. ^ «Что нового в C# 12» . Microsoft Learn . Архивировано из оригинала 20 июля 2023 года . Проверено 29 июня 2023 г.
  67. ^ «Примечания к выпуску Visual Studio 2022 версии 17.6» . Microsoft Learn . Архивировано из оригинала 6 августа 2023 года . Проверено 29 июня 2023 г.
  68. ^ Новак и др. 2010 .
  69. ^ Стивихимс; mattwojo (20 октября 2022 г.). «Компиляция приложений с помощью .NET Native — приложений UWP» . Learn.microsoft.com . Архивировано из оригинала 27 октября 2023 года . Проверено 27 октября 2023 г.
  70. ^ ЛакшанФ; агоке; Рик-Андерсон; и др. (12 сентября 2023 г.). «Обзор развертывания собственного AOT — .NET» . Learn.microsoft.com . Архивировано из оригинала 11 ноября 2023 года . Проверено 27 октября 2023 г. {{cite web}}: CS1 maint: числовые имена: список авторов ( ссылка )
  71. ^ «Типы/Общие, часть официальной документации C#» . Майкрософт . Архивировано из оригинала 29 марта 2024 года . Проверено 6 апреля 2024 г.
  72. ^ БиллВагнер. «Деревья выражений (C#)» . Microsoft Learn . Архивировано из оригинала 15 мая 2021 года . Проверено 14 мая 2021 г.
  73. ^ дотнет-бот. «Пространство имен System.Reflection.Emit» . Learn.microsoft.com . Архивировано из оригинала 28 апреля 2023 года . Проверено 28 апреля 2023 г.
  74. ^ Макаллистер, Нил (20 октября 2011 г.). «Рослин от Microsoft: заново изобретая компилятор, каким мы его знаем» . Инфомир . Архивировано из оригинала 5 марта 2022 года . Проверено 5 марта 2022 г.
  75. ^ «Знакомство с генераторами исходного кода C#» . .NET-блог . 29 апреля 2020 года. Архивировано из оригинала 7 мая 2021 года . Проверено 14 мая 2021 г.
  76. ^ «Классы/поля, часть официальной документации C#» .
  77. ^ "out (Справочник по C#)" .
  78. ^ «Модификатор параметров/параметров метода, часть официальной документации C#» .
  79. ^ Перейти обратно: а б «Классы/свойства, часть официальной документации C#» .
  80. ^ «виртуальный (Справочник по C#)» . Microsoft Learn . 15 сентября 2021 года. Архивировано из оригинала 30 августа 2018 года . Проверено 4 апреля 2018 г.
  81. ^ « новый модификатор, часть официальной документации C#» .
  82. ^ «Автоматически реализуемые свойства (Руководство по программированию на C#)» . Архивировано из оригинала 29 октября 2020 года . Проверено 12 сентября 2020 г.
  83. ^ «Директива using — Справочник по C#» . Документы Майкрософт . Архивировано из оригинала 14 апреля 2019 года . Проверено 14 апреля 2019 г.
  84. ^ БиллВагнер. «Небезопасный код, указатели на данные и указатели на функции» . Microsoft Learn . Архивировано из оригинала 4 июля 2021 года . Проверено 20 июня 2021 г.
  85. ^ «Как создавать пользовательские исключения» . Архивировано из оригинала 26 января 2021 года . Проверено 12 сентября 2020 г.
  86. ^ [hhttps://learn.microsoft.com/en-us/dotnet/csharp/language-reference/statements/Exception-handling-statements «Операторы обработки исключений, часть официальной документации C#»]. Microsoft Learn . Проверено 26 июня 2024 г.
  87. ^ Веннерс, Билл; Экель, Брюс (18 августа 2003 г.). «Проблема с проверенными исключениями» . Архивировано из оригинала 18 февраля 2015 года . Проверено 30 марта 2010 г.
  88. ^ БиллВагнер. «Перегрузка операторов — справочник по C#» . Microsoft Learn . Архивировано из оригинала 24 июня 2021 года . Проверено 20 июня 2021 г.
  89. ^ «Разрешение выражений/перегрузки, часть официальной документации C#» . Microsoft Learn . Проверено 7 апреля 2024 г.
  90. ^ «Типы/сконструированные типы, часть официальной документации C#» . Microsoft Learn . Проверено 7 апреля 2024 г.
  91. ^ «Ограничения параметров классов/типов, часть официальной документации C#» . Microsoft Learn . Проверено 7 апреля 2024 г.
  92. ^ Чжан, Сюэ Донг; Тенг, Цзы Му; Чжао, Донг Ван (сентябрь 2014 г.). «Исследование технологии доступа к базам данных в рамках .NET Framework». Прикладная механика и материалы . 644–650: 3077–3080. doi : 10.4028/www.scientific.net/AMM.644-650.3077 . S2CID   62201466 . ПроКвест   1565579768 .
  93. ^ Оти, Майкл (февраль 2006 г.). «LINQ в будущее». Журнал SQL Server . Том. 8, нет. 2. стр. 17–21. ПроКвест   214859896 .
  94. ^ Шелдон, Уильям (ноябрь 2010 г.). «Новые возможности LINQ». Журнал SQL Server . Том. 12, нет. 11. С. 37–40. ПроКвест   770609095 .
  95. ^ БиллВагнер (15 сентября 2021 г.). «Синтаксис запроса и синтаксис метода в LINQ (C#)» . Learn.microsoft.com . Архивировано из оригинала 23 мая 2023 года . Проверено 23 мая 2023 г.
  96. ^ Эрикдитрих (9 марта 2023 г.). «История C# — Руководство по C#» . Learn.microsoft.com . Архивировано из оригинала 28 апреля 2023 года . Проверено 28 апреля 2023 г.
  97. ^ Функциональное путешествие C# — Мадс Торгерсен — NDC Copenhagen 2022 , заархивировано из оригинала 15 мая 2023 г. , получено 15 мая 2023 г.
  98. ^ «Красота замыканий» . csharpineepep.com . Архивировано из оригинала 19 мая 2023 года . Проверено 28 апреля 2023 г.
  99. ^ Перейти обратно: а б БиллВагнер. «Анонимные функции — Руководство по программированию на C#» . Microsoft Learn . Архивировано из оригинала 15 апреля 2021 года . Проверено 15 мая 2021 г.
  100. ^ Перейти обратно: а б с «Что нового в C# 7.0» . Документы Майкрософт . Архивировано из оригинала 6 августа 2020 года . Проверено 14 апреля 2019 г.
  101. ^ «C# 9.0 в записи» . .NET-блог . 10 ноября 2020 года. Архивировано из оригинала 15 мая 2021 года . Проверено 15 мая 2021 г.
  102. ^ БиллВагнер (30 июня 2022 г.). «Ключевое слово init — Справочник по C#» . Learn.microsoft.com . Архивировано из оригинала 19 мая 2023 года . Проверено 19 мая 2023 г.
  103. ^ Платформа компилятора .NET , Платформа .NET, 28 апреля 2023 г., заархивировано из оригинала 28 апреля 2023 г. , получено 28 апреля 2023 г.
  104. ^ Перейти обратно: а б с д Арчер 2001 .
  105. ^ Липперт, Эрик (19 марта 2009 г.). «Представительство и идентичность» . Невероятные приключения в программировании . Блоги.msdn.com. Архивировано из оригинала 12 июля 2011 года . Проверено 4 октября 2012 г.
  106. ^ «Библиотеки фреймворков» . Microsoft Learn . 19 апреля 2023 года. Архивировано из оригинала 14 июля 2019 года . Проверено 14 июля 2019 г.
  107. ^ БиллВагнер. «Что нового в C# 9.0 — Руководство по C#» . Microsoft Learn . Архивировано из оригинала 5 сентября 2020 года . Проверено 14 мая 2021 г.
  108. ^ БиллВагнер. «Main() и аргументы командной строки» . Microsoft Learn . Архивировано из оригинала 5 августа 2021 года . Проверено 5 августа 2021 г.
  109. ^ «Раскрытие возможностей универсальных шаблонов C#: комплексное руководство» . 24 апреля 2024 г.
  110. ^ «Патентный залог для разработчиков открытого исходного кода» . 16 марта 2023 года. Архивировано из оригинала 7 декабря 2017 года . Проверено 28 октября 2017 г.
  111. ^ «Соглашение о патентной кооперации — сотрудничество Microsoft и Novell в области обеспечения совместимости» . Майкрософт . 2 ноября 2006 года. Архивировано из оригинала 17 мая 2009 года . Проверено 5 июля 2009 г. Microsoft от своего имени и от имени своих Дочерних компаний (совместно именуемых «Microsoft») настоящим обязуется не подавать в суд на Клиентов Novell и Клиентов Дочерних компаний Novell за нарушение охраняемых патентов Microsoft в связи с использованием Клиентом определенных копий Соответствующего продукта, распространяемые компанией Novell или ее дочерними компаниями (совместно именуемые «Novell»), за которые Novell получила доход (прямо или косвенно) за такие конкретные копии; при условии, что вышеуказанное соглашение ограничивается использованием таким Заказчиком (i) таких конкретных копий, которые разрешены Novell в счет получения такого Дохода, и (ii) в пределах объема, разрешенного Novell в счет такого Дохода.
  112. ^ «Определения» . Майкрософт . 2 ноября 2006 г. Архивировано из оригинала 4 ноября 2012 г. Проверено 5 июля 2009 г.
  113. ^ Стейнман, Джастин (7 ноября 2006 г.). «Novell отвечает на вопросы сообщества» . Архивировано из оригинала 16 июля 2013 года . Проверено 5 июля 2009 г. Мы утверждаем, что Mono не нарушает никаких патентов Microsoft.
  114. ^ «Соглашение с последующими получателями лунного света — сотрудничество Microsoft и Novell в области обеспечения совместимости» . Майкрософт . 28 сентября 2007 года. Архивировано из оригинала 23 сентября 2010 года . Проверено 8 марта 2008 г. «Последующий получатель» означает юридическое или физическое лицо, которое использует по назначению реализацию Moonlight, полученную непосредственно от Novell или через промежуточного получателя... Microsoft оставляет за собой право обновить (в том числе прекратить действие) вышеизложенное соглашение... «Реализация Moonlight». означает только те конкретные части Moonlight 1.0 или Moonlight 1.1, которые запускаются только как плагин к браузеру на Персональном компьютере и не лицензируются по GPLv3 или аналогичной лицензии.
  115. ^ Перейти обратно: а б «Переход на RyuJIT завершен!» . microsoft.com . 19 июня 2018 года. Архивировано из оригинала 19 июля 2019 года . Проверено 20 июля 2021 г.
  116. ^ «Управляемый процесс исполнения» . microsoft.com . Архивировано из оригинала 23 декабря 2017 года . Проверено 20 июля 2021 г.
  117. ^ "coreclr/src/jit/" . github.com . Архивировано из оригинала 9 января 2019 года . Проверено 20 июля 2021 г.
  118. ^ «Руководство по C#» . Microsoft Learn . Архивировано из оригинала 13 августа 2022 года . Проверено 28 июля 2017 г.
  119. ^ «5.0.8» . microsoft.com . Архивировано из оригинала 23 апреля 2020 года . Проверено 20 июля 2021 г.
  120. ^ «Снижение последствий: новый 64-битный JIT-компилятор» . microsoft.com . Архивировано из оригинала 5 апреля 2018 года . Проверено 20 июля 2021 г.
  121. ^ Эчеверри, Игнасио (21 октября 2017 г.). «Введение в C# в Godot» . Двигатель Годо . Архивировано из оригинала 26 октября 2018 года . Проверено 26 октября 2018 г.

Источники

[ редактировать ]
  • Альбахари, Джозеф (2022). C# 10 в двух словах (первое изд.). О'Рейли. ISBN  978-1-098-12195-2 .
  • Арчер, Том (2001). «Часть 2, Глава 4: Система типов». Внутри С# . Редмонд, Вашингтон: Microsoft Press. ISBN  0-7356-1288-9 .
  • Новак, Иштван; Вельварт, Андрас; Гранич, Адам; Баласси, Дьёрдь; Хайдрик, Аттила; Селлерс, Митчелл; Хиллар, Гастон К.; Мольнар, Агнес; Канджилал, Джойдип (2010). Visual Studio 2010 и .NET 4 «шесть в одном» . Врокс Пресс. ISBN  978-0470499481 .
  • Скит, Джон (2019). C# в глубине (Четвертое изд.). Мэннинг. ISBN  978-1617294532 .

Дальнейшее чтение

[ редактировать ]
[ редактировать ]
Arc.Ask3.Ru: конец переведенного документа.
Arc.Ask3.Ru
Номер скриншота №: 4981df88d0b2e2e44e0095ccc4e827a0__1722857280
URL1:https://arc.ask3.ru/arc/aa/49/a0/4981df88d0b2e2e44e0095ccc4e827a0.html
Заголовок, (Title) документа по адресу, URL1:
C Sharp (programming language) - Wikipedia
Данный printscreen веб страницы (снимок веб страницы, скриншот веб страницы), визуально-программная копия документа расположенного по адресу URL1 и сохраненная в файл, имеет: квалифицированную, усовершенствованную (подтверждены: метки времени, валидность сертификата), открепленную ЭЦП (приложена к данному файлу), что может быть использовано для подтверждения содержания и факта существования документа в этот момент времени. Права на данный скриншот принадлежат администрации Ask3.ru, использование в качестве доказательства только с письменного разрешения правообладателя скриншота. Администрация Ask3.ru не несет ответственности за информацию размещенную на данном скриншоте. Права на прочие зарегистрированные элементы любого права, изображенные на снимках принадлежат их владельцам. Качество перевода предоставляется как есть. Любые претензии, иски не могут быть предъявлены. Если вы не согласны с любым пунктом перечисленным выше, вы не можете использовать данный сайт и информация размещенную на нем (сайте/странице), немедленно покиньте данный сайт. В случае нарушения любого пункта перечисленного выше, штраф 55! (Пятьдесят пять факториал, Денежную единицу (имеющую самостоятельную стоимость) можете выбрать самостоятельно, выплаичвается товарами в течение 7 дней с момента нарушения.)