Всего найдено: 7
Здравствуйте, подскажите, пожалуйста, как правильно склоняется слово «пол-листа»?
Ответ справочной службы русского языка
На склонение сочетаний типа пол-листа в науке есть разные точки зрения. Наиболее убедительная в состоит в том, что это несклоняемые сочетания. Элемент пол- в этой концепции рассматривается как самостоятельное слово (вопреки написанию), приближающееся по своим функциям к числительному. Это выражается, например, в способности сочетаться с определением в форме мн. числа (ср.: каждые полгода и каждые два года) и возможности вставить определение (пол-листа — пол большого листа). Сочетания с пол- выступают только в именительном или винительном падеже. В конструкциях, где требуется другой падеж, в строго нормированной литературной речи сочетания с пол- употребляться не могут. Однако вместо них могут использоваться слова с частью полу-, например: прошло полмесяца — прошло около полумесяца, пройти полкилометра — в полукилометре от дома. Часть полу- образует именно слова, а не свободные сочетания. Но у таких слов отсутствует форма именительного-винительного падежа (их нужно отличать от слов, в которых полу— присоединяется к именительному падежу: полукруг, полуостров, полумаска, полутон, полуфинал и др.; такие слова имеют полный набор падежных форм).
Почему слова с полу— это именно другие образования, а не формы слов с элементом пол-? Часть пол— легко сочетается с любыми существительными, обозначающими предметы, поддающиеся счету. Сложные слова с полу- не образуются с той степенью свободы, которая характерна для сочетаний с пол-, поэтому далеко не всякому сочетанию с пол- соответствует сложное слово с полу-. Например, не говорят: разбавь это *получашкой молока, около *полудома уже заселено, к *полуогороду мы еще не прикасались.
Данный подход к описанию сочетаний с элементом пол- нашел отражение в словарях, например в «Русском орфографическом словаре», где к словам типа пол-листа не дается окончание родительного падежа, оно указывается при склоняемых существительных (ср. словарные статьи пол-листа и полуфинал), в «Грамматическом словаре русского языка» А. А. Зализняка, в «Орфоэпическом словаре русского языка» под ред. Н. А. Еськовой (см. параграфы 31—33 раздела «Сведения о грамматических формах»).
Другая точка зрения представлена в «Русской грамматике» 1980 года. Здесь говорится о том, что все слова с первым компонентом пол— принадлежат к тому же грамматическому роду и типу склонения, что и то слово, форма род. падежа которого выступает в опорном (втором) компоненте, при этом часть пол- заменяется на полу-. В текстах встречаются подобные формы: (два) полулиста, (по) полулисту, (с) полулистом, (о) полулисте. Однако они оцениваются словарями как формы слова полулист.
Нужна ли запятая после слова пряжка? Пряжка (,) чёрного цвета, полукруглой формы из нержавеющей стали
Ответ справочной службы русского языка
Постановка запятой не требуется.
«Не могли бы вы привести все варианты и историю возникновения такого разнобоя при употрблении «пол».
Да, значение «половина». Например, пол-лимона. В одних случаях — слитно, в др. — раздельно, или через дефис.
Ответ справочной службы русского языка
Разнобоя нет, есть четкое правило дефисного и слитного написания. Пол- (половина) пишется через дефис с последующим родительным падежом существительного, если существительное начинается с гласной буквы или согласной л, например: пол-оборота, пол-яблока, пол-лимона, но: полметра, полчаса, полкомнаты; через дефис пишутся также сочетания пол- с последующим именем собственным, например: пол-Москвы, пол-Европы. Слова, начинающиеся с полу-, всегда пишутся слитно, например: в полуверсте от города, полустанок, полукруг.
объясните,пожалуйста,почему «полукруглых» пишется слитно?
Ответ справочной службы русского языка
Первая часть сложных слов ПОЛУ… пишется слитно с последующей частью слова.
Здавствуйте!
интересует правильность написания следующих слов:
пол-одиннадцатого
полдвенадцатого
пол-утра
полдня (ждал её полдня, а она…)
полночиСогласно правилам —
«12. Пол- (половина) с последующим родительным падежом существительного, если существительное начинается с гласной буквы или согласной л, например: пол-оборота, пол-яблока, пол-лимона, но: полметра, полчаса, полкомнаты; через дефис пишутся также сочетания пол- с последующим именем собственным, например: пол-Москвы, пол-Европы. Слова, начинающиеся с полу-, всегда пишутся слитно, например: в полуверсте от города, полустанок, полукруг» — это так, однако, хотелось бы удостовериться.
именно в этих словах возникает замешательство, но в примерах их не приводят нигде((((
Спасибо!
Ответ справочной службы русского языка
Вы всё написали правильно.
Ралли «Сочи-2008». в данном и подобных случаях перед датой ставится тире, полукруглое тире или дефис? спасибо
Ответ справочной службы русского языка
Верно с дефисом.
Скажите, пожалуйста, как пишется пол- со словами?
Ответ справочной службы русского языка
Пол- (половина) с последующим родительным падежом существительного пишется через дефис, если существительное начинается с гласной буквы или согласной л, например: _пол-оборота, пол-яблока, пол-лимона_, но: _полметра, полчаса, полкомнаты_; через дефис пишутся также сочетания пол- с последующим именем собственным, например: _пол-Москвы, пол-Европы_. Слова, начинающиеся с _полу-_, всегда пишутся слитно, например: в полуверсте от города, полустанок, полукруг.
Всего найдено: 90
Скажите, как правильно: мощностью 3 мегаватт или три мегаватта? Склоняется ли последнее слово?
Ответ справочной службы русского языка
Правильно: мощностью два, три, четыре мегаватта, но: пять, шесть, семь… мегаватт.
1493,4 мегаватта — правильно ли написано мегаватта?
Ответ справочной службы русского языка
Правильно.
Мега заведение, мега гений — пишется через дефис, слитно или раздельно?
Ответ справочной службы русского языка
Первая часть сложных слов мега… пишется слитно: мегазаведение, мегагений.
Почему медиаарт пишется слитно, а соц-арт, поп-арт — через дефис? Какая тут логика?
Ответ справочной службы русского языка
Логика в том, что по нормам русской орфографии пишутся слитно слова с первой иноязычной (интернациональной) частью, кончающейся на гласную -а: авиа-, дека-, мега-, медиа-, тетра-.
Добрый день. Как правильно писать мегабит в секунду — Мбит/с, Мбит/сек., Мбит/сек?
Ответ справочной службы русского языка
«Русский орфографический словарь» РАН фиксирует сокращение Мбит/с.
Будьте любезны, ответьте, пожалуйста, насколько серьезная ошибка, такое написание в середине предложения: Омега 3.
И есть ли современное правило, регламентирующее написание этого слова. Спасибо!
Ответ справочной службы русского языка
Корректно (как нарицательное наименование): омега-3.
Как правильно сокращается слово «килобайт» русскими буквами. «Мегабайт» — в Лопатине есть — Мб, «килобайт» — нет. Пожалуйста!
Ответ справочной службы русского языка
Нормативное сокращение от килобайт – Кб и Кбайт, от мегабайт – Мб и Мбайт (см.: Русский орфографический словарь РАН / Под ред. В. В. Лопатина, О. Е. Ивановой. – 4-е изд., испр. и доп. – М., 2012).
Уважаемая Грамота! Как правильно пишется слово «мега-масс- старт» или «мегамасс-старт»? Помогите, пожалуйста.
Ответ справочной службы русского языка
Слово масс-старт пишется через дефис, поэтому мы не можем писать мега… с этим словом слитно (хотя обычно первая часть сложных слов мега… пишется слитно). Необходимо использовать дефисное написание: мега-масс-старт.
Здравствуйте. Подскажите, пожалуйста, как правильно написать «мега-акция». Влияет ли совпадение гласных букв на правописание слова (слитно или через дефис) или все слова с частью «мега» всегда пишутся слитно без исключений?
Буду благодарна за ответ.
Ответ справочной службы русского языка
Правильно: мегаакция. Мега… пишется слитно и в том случае, когда вторая часть слова начинается с а.
Здравствуйте. Есть сомнение, как писать названия иностранных мероприятий типа: карнавал Оммеганг, праздник Мейбом, парад Зиннеке, ярмарка Миди. Нужны ли кавычки? С одной стороны, есть ответ на вопрос № 231978, где говорится, что в кавычках пишутся географические названия, но ведь правильно музей Прадо, музей Орсе, галерея Уффици. Только музеи — исключение?
Ответ справочной службы русского языка
Названия праздников, карнавалов не заключаются в кавычки.
Здравствуйте!
Будьте добры, ответьте, пожалуйста, на вопрос, который вызывает у меня постоянное беспокойство. Как пишутся прилагательные такого рода в следующих сочетаниях: «2- и 3-мегапиксельные камеры» или «2-х и 3-х мегапиксельные камеры». Меня принуждают ко второму варианту, но он меня пугает, хотя и в первом я не уверена — правила на эту тему не нашла. Как правильно?
Ответ справочной службы русского языка
Корректен первый вариант (без буквенного наращения).
Как правильно пишутся названия зарубежных автомобилей (Ford, Форд или «форд»)?
Ответ справочной службы русского языка
Вот основные правила.
Справочники рекомендуют писать названия марок автомобилей в кавычках с прописной буквы: автомобили «Волга», «Вольво», «Ниссан», «Шкода», а названия самих автомобилей как технических изделий – со строчной буквы в кавычках (кроме названий, совпадающих с собственными именами – личными и географическими). Например: «кадиллак», «москвич», «тойота», «ниссан», но: «Волга», «Ока» (совпадают с именами собственными, поэтому пишутся с большой буквы). Исключения: «жигули», «мерседес» (совпадают с именами собственными, но пишутся со строчной). Однако на практике различить, в каком случае наименование представляет собой название марки автомобиля, а в каком – наименование технического изделия, часто представляется затруднительным: Всем автомобилям он предпочитает «Тойоту» / «тойоту». В спорных случаях решение о написании с прописной или строчной буквы принимает автор текста.
Названия, написанные латиницей, в кавычки не заключаются: автомобили Toyota Yaris, Peugeot 306, Daewoo Matiz, Škoda Fabia, Lada Priora.
Неоднословные названия (марка и модель автомобиля), написанные кириллицей, пишутся через дефис, при этом все части наименования пишутся с прописной буквы: «Лада-Приора», «Тойота-Королла», «Рено-Меган», «Ниссан-Теана», «Хёндай-Гетц», «Ниссан-Альмера-Классик», «Сузуки-Гранд-Витара». Но: «Фольксваген-жук» (перекличка с нарицательным существительным).
Аббревиатурные названия пишутся без кавычек: ЗИЛ, ВАЗ, КамАЗ.
В бытовом употреблении названия средств передвижения пишутся без кавычек, например: Приехал на стареньком москвиче (на роскошном кадиллаке). Без кавычек пишутся также разговорные названия машин с уменьшительно-ласкательными суффиксами, напр.: москвичок, фордик, уазик.
Как правильно пишется в сокращенном варианте такая единица измерения, как пиксель. Где-то прочитала, что уже принято официальное русское обозначение: пк. Но подтверждения в словарях на нашла. Мне непонятно, как обозначать разрешающую способность камер по-русски: Мп, МП, Мпк или Мпикс? Пожалуйста, ответьте, — очень нужно для работы!
Ответ справочной службы русского языка
Нормативное сокращение от мегапиксель – Мпк (см.: Русский орфографический словарь РАН / Под ред. В. В. Лопатина, О. Е. Ивановой. – 4-е изд., испр. и доп. – М., 2012).
В разных научных журналах встречается разное написание суффиксов в словах с одинаковым корнем. Прошу
помочь разобраться. Как правильно терагерцОвый диапазон/терагерцОвого, но мегагерцЕвый/мегагерцЕвого. Почему один корень, но разные суффиксы?
Ответ справочной службы русского языка
«Русский орфографический словарь» РАН фиксирует:
стогерцевый
мегагерцевый
килогерцевый
герцевый
гигагерцевый
По аналогии должно быть и терагерцевый. Причин для различного написания подобных слов нет.
Как правильно будет употребить в данном случае «в предверии» или «в предверие»? И почему? Где можно правило прочитать?
Предложение: «В преддверие Нового года, компания Мегафон для своих сотрудников провела корпоративный выходной…»
Ответ справочной службы русского языка
Правильно: В преддверии Нового года компания «Мегафон» для своих сотрудников провела корпоративный выходной… Написание предлога в преддверии чего-либо надо запомнить.
- Статья
- Чтение занимает 6 мин
C# (произносится как «си шарп») — современный объектно-ориентированный и типобезопасный язык программирования. C# позволяет разработчикам создавать разные типы безопасных и надежных приложений, выполняющихся в .NET. C# относится к широко известному семейству языков C, и покажется хорошо знакомым любому, кто работал с C, C++, Java или JavaScript. Здесь представлен обзор основных компонентов языка C# 8 и более ранних версий. Если вы хотите изучить язык с помощью интерактивных примеров, рекомендуем поработать с вводными руководствами по C#.
C# — это объектно- и компонентно-ориентированный _ язык программирования. C# предоставляет языковые конструкции для непосредственной поддержки такой концепции работы. Благодаря этому C# подходит для создания и применения программных компонентов. С момента создания язык C# обогатился функциями для поддержки новых рабочих нагрузок и современными рекомендациями по разработке ПО. C# — это _ объектно-ориентированный язык. Вы определяете типы и их поведение.
Вот лишь несколько функций языка C#, которые позволяют создавать надежные и устойчивые приложения. *Сборка мусора _ автоматически освобождает память, занятую недоступными неиспользуемыми объектами. Типы, допускающие значение null, обеспечивают защиту от переменных, которые не ссылаются на выделенные объекты. Обработка исключений предоставляет структурированный и расширяемый подход к обнаружению ошибок и восстановлению после них. Лямбда-выражения поддерживают приемы функционального программирования. Синтаксис LINQ создает общий шаблон для работы с данными из любого источника. Поддержка языков для асинхронных операций предоставляет синтаксис для создания распределенных систем. В C# действует _ *единая система типов**. Все типы C#, включая типы-примитивы, такие как int
и double
, наследуют от одного корневого типа object
. Все типы используют общий набор операций, а значения любого типа можно хранить, передавать и обрабатывать схожим образом. Более того, C# поддерживает как определяемые пользователями ссылочные типы, так и типы значений. C# позволяет динамически выделять объекты и хранить упрощенные структуры в стеке. C# поддерживает универсальные методы и типы, обеспечивающие повышенную безопасность типов и производительность. C# предоставляет итераторы, которые позволяют разработчикам классов коллекций определять пользовательские варианты поведения для клиентского кода.
В C# особое внимание уделяется управлению версиями для обеспечения совместимости программ и библиотек при их изменении. Вопросы управления версиями существенно повлияли на такие аспекты разработки C#, как раздельные модификаторы virtual
и override
, правила разрешения перегрузки методов и поддержка явного объявления членов интерфейса.
Архитектура .NET
Программы C# выполняются в .NET, виртуальной системе выполнения, вызывающей общеязыковую среду выполнения (CLR) и набор библиотек классов. Среда CLR — это реализация общеязыковой инфраструктуры языка (CLI), являющейся международным стандартом, от корпорации Майкрософт. CLI является основой для создания сред выполнения и разработки, в которых языки и библиотеки прозрачно работают друг с другом.
Исходный код, написанный на языке C# компилируется в промежуточный язык (IL), который соответствует спецификациям CLI. Код на языке IL и ресурсы, в том числе растровые изображения и строки, сохраняются в сборке, обычно с расширением .dll. Сборка содержит манифест с информацией о типах, версии, языке и региональных параметрах для этой сборки.
При выполнении программы C# сборка загружается в среду CLR. Среда CLR выполняет JIT-компиляцию из кода на языке IL в инструкции машинного языка. Среда CLR также выполняет другие операции, например, автоматическую сборку мусора, обработку исключений и управление ресурсами. Код, выполняемый в среде CLR, иногда называется управляемым кодом. «Неуправляемый код» преобразуется в машинный язык, предназначенный для конкретной платформы.
Обеспечение взаимодействия между языками является ключевой особенностью .NET. Код IL, созданный компилятором C#, соответствует спецификации общих типов (CTS). Код IL, созданный из кода на C#, может взаимодействовать с кодом, созданным из версий .NET для языков F#, Visual Basic, C++. Существует более 20 других языков, совместимых с CTS. Одна сборка может содержать несколько модулей, написанных на разных языках .NET, и все типы могут ссылаться друг на друга, как если бы они были написаны на одном языке.
В дополнение к службам времени выполнения .NET также включает расширенные библиотеки. Эти библиотеки поддерживают множество различных рабочих нагрузок. Они упорядочены по пространствам имен, которые предоставляют разные полезные возможности: от операций файлового ввода и вывода до управления строками и синтаксического анализа XML, от платформ веб-приложений до элементов управления Windows Forms. Обычно приложение C# активно используют библиотеку классов .NET для решения типовых задач.
Дополнительные сведения о .NET, см. в статье Обзор .NET.
Здравствуй, мир
Для первого знакомства с языком программирования традиционно используется программа «Hello, World». Вот ее пример на C#:
using System;
class Hello
{
static void Main()
{
Console.WriteLine("Hello, World");
}
}
Программа «Hello, World» начинается с директивы using
, которая ссылается на пространство имен System
. Пространства имен позволяют иерархически упорядочивать программы и библиотеки C#. Пространства имен содержат типы и другие пространства имен. Например, пространство имен System
содержит несколько типов (в том числе используемый в нашей программе класс Console
) и несколько других пространств имен, таких как IO
и Collections
. Директива using
, которая ссылается на пространство имен, позволяет использовать типы из этого пространства имен без указания полного имени. Благодаря директиве using
в коде программы можно использовать сокращенное имя Console.WriteLine
вместо полного варианта System.Console.WriteLine
.
Класс Hello
, объявленный в программе «Hello, World», имеет только один член — это метод с именем Main
. Метод Main
объявлен с модификатором static
. Методы экземпляра могут ссылаться на конкретный экземпляр объекта, используя ключевое слово this
, а статические методы работают без ссылки на конкретный объект. По стандартному соглашению точкой входа программы C# является статический метод с именем Main
.
Выходные данные программы создаются в методе WriteLine
класса Console
из пространства имен System
. Этот класс предоставляется библиотеками стандартных классов, ссылки на которые компилятор по умолчанию добавляет автоматически.
Типы и переменные
Тип определяет структуру и поведение любых данных в C#. Объявление типа может включать его члены, базовый тип, интерфейсы, которые он реализует, и операции, разрешенные для этого типа. Переменная — это метка, которая ссылается на экземпляр определенного типа.
В C# существуют две разновидности типов: ссылочные типы и типы значений. Переменные типа значений содержат непосредственно данные, а в переменных ссылочных типов хранятся ссылки на нужные данные, которые именуются объектами. Две переменные ссылочного типа могут ссылаться на один и тот же объект, поэтому может случиться так, что операции над одной переменной затронут объект, на который ссылается другая переменная. Каждая переменная типа значения имеет собственную копию данных, и операции над одной переменной не могут затрагивать другую (за исключением переменных параметров ref
и out
).
Идентификатор является именем переменной. Идентификатор — это последовательность символов Юникода без пробелов. Идентификатор может быть зарезервированным словом C#, если он имеет префикс @
. При взаимодействии с другими языками в качестве идентификатора может быть полезно использовать зарезервированное слово.
Типы значений в C# делятся на простые типы, типы перечислений, типы структур, типы, допускающие значение NULL, и типы значений кортежей. Ссылочные типы в C# подразделяются на типы классов, типы интерфейсов, типы массивов и типы делегатов.
Далее представлены общие сведения о системе типов в C#.
- Типы значений
- Простые типы
- Целочисленный со знаком:
sbyte
,short
,int
,long
. - Целочисленный без знака:
byte
,ushort
,uint
,ulong
. - Символы Юникода:
char
, который представляет блок кода в кодировке UTF-16. - Бинарный оператор IEEE с плавающей запятой:
float
,double
. - Десятичное значение с повышенной точностью и плавающей запятой:
decimal
. - Логический:
bool
, используется для представления логических значений, которые могут иметь значениеtrue
илиfalse
.
- Целочисленный со знаком:
- Типы перечисления
- Пользовательские типы в формате
enum E {...}
. Типenum
является отдельным типом со списком именованных констант. Каждый типenum
имеет базовый тип, в роли которого выступает один из восьми целочисленных типов. Набор значений типаenum
аналогичен набору значений его базового типа.
- Пользовательские типы в формате
- Типы структур
- Пользовательские типы в формате
struct S {...}
- Пользовательские типы в формате
- Типы значений, допускающие значение NULL
- Расширения других типов значений, допускающие значение
null
- Расширения других типов значений, допускающие значение
- Типы значений кортежей
- Пользовательские типы в формате
(T1, T2, ...)
- Пользовательские типы в формате
- Простые типы
- Ссылочные типы
- Типы классов
- Исходный базовым классом для всех типов:
object
- Строки в Юникоде:
string
, который представляет последовательность блоков кода в кодировке UTF-16. - Пользовательские типы в формате
class C {...}
- Исходный базовым классом для всех типов:
- Типы интерфейсов
- Пользовательские типы в формате
interface I {...}
- Пользовательские типы в формате
- Типы массивов
- Одномерные, многомерные массивы и массивы массивов. Например,
int[]
,int[,]
иint[][]
.
- Одномерные, многомерные массивы и массивы массивов. Например,
- Типы делегатов
- Пользовательские типы в формате
delegate int D(...)
- Пользовательские типы в формате
- Типы классов
Программы C# используют объявления типов для создания новых типов. В объявлении типа указываются имя и члены нового типа. Шесть категорий типов в C# определяются пользователем: типы классов, типы структур, типы интерфейсов, типы перечисления, типы делегатов и типы значений кортежей. Можно также объявлять типы record
, либо record struct
, либо record class
. Типы записей имеют члены, синтезированные компилятором. Записи используются в основном для хранения значений с минимальным связанным поведением.
- Тип
class
определяет структуру данных, которая содержит данные-члены (поля) и функции-члены (методы, свойства и т. д.). Классы поддерживают механизмы одиночного наследования и полиморфизма, которые позволяют создавать производные классы, расширяющие и уточняющие определения базовых классов. - Тип
struct
похож на тип класса тем, что он представляет структуру с данными-членами и функциями-членами. Но, в отличие от классов, структуры являются типами значений и обычно не требуют выделения памяти из кучи. Типы структуры не поддерживают определяемое пользователем наследование, и все типы структуры неявно наследуют от типаobject
. - Тип
interface
определяет контракт в виде именованного набора открытых элементов. Объект типаclass
илиstruct
, реализующийinterface
, должен предоставить реализации для всех элементов интерфейса. Типinterface
может наследовать от нескольких базовых интерфейсов, аclass
илиstruct
могут реализовывать несколько интерфейсов. - Тип
delegate
(делегат) представляющий ссылки на методы с конкретным списком параметров и типом возвращаемого значения. Делегаты позволяют использовать методы как сущности, сохраняя их в переменные и передавая в качестве параметров. Делегаты аналогичны типам функций, которые используются в функциональных языках. Их принцип работы близок к указателям функций из некоторых языков. В отличие от указателей функций, делегаты являются объектно-ориентированными и типобезопасными.
Типы class
, struct
, interface
и delegate
поддерживают универсальные шаблоны, которые позволяют передавать им другие типы в качестве параметров.
C# поддерживает одномерные и многомерные массивы любого типа. В отличие от перечисленных выше типов, типы массивов не требуется объявлять перед использованием. Типы массивов можно сформировать, просто введя квадратные скобки после имени типа. Например, int[]
является одномерным массивом значений типа int
, а int[,]
— двумерным массивом значений типа int
, тогда как int[][]
представляет собой одномерный массив одномерных массивов (или массив массивов) значений типа int
.
Типы, допускающие значение NULL, не требуют отдельного определения. Для каждого обычного типа T
, который не допускает значение NULL, существует идентичный тип T?
, который отличается только тем, что может содержать дополнительное значение null
. Например, int?
является типом, который может содержать любое 32-разрядное целое число или значение null
, а string?
— любое значение string
или null
.
Система типов в C# унифицирована таким образом, что значение любого типа можно рассматривать как object
(объект). Каждый тип в C# является прямо или косвенно производным от типа класса object
, и этот тип object
является исходным базовым классом для всех типов. Чтобы значения ссылочного типа обрабатывались как объекты, им просто присваивается тип object
. Чтобы значения типов значений обрабатывались как объекты, выполняются операции упаковки-преобразования и распаковки-преобразования. В следующем примере значение int
преобразуется в object
, а затем обратно в int
.
int i = 123;
object o = i; // Boxing
int j = (int)o; // Unboxing
Если значение типа назначается ссылке object
, для хранения значения выделяется упаковка. Эта упаковка является экземпляром ссылочного типа, и в нее копируется значение. И наоборот, если ссылка типа object
используется для типа значения, для соответствующего object
выполняется проверка, является ли он упаковкой правильного типа. Если эта проверка завершается успешно, копируется значение этой упаковки.
Унифицированная система типов C# фактически позволяет преобразовывать типы значений в ссылки object
«по требованию». Такая унификация позволяет применять универсальные библиотеки, использующие тип object
, со всеми типами, производными от object
, включая как ссылочные типы, так и с типы значений.
В C# существует несколько типов переменных, в том числе поля, элементы массива, локальные переменные и параметры. Переменные представляют собой места хранения, и каждая переменная имеет тип, который определяет допустимые значения для хранения в этой переменной. Примеры представлены ниже.
- Тип значения, не допускающий значения Null
- Значение такого типа
- Тип значения, допускающий значение Null
- Значение
null
или значение такого типа
- Значение
- object
- Ссылка
null
, ссылка на объект любого ссылочного типа или ссылка на упакованное значение любого типа значения
- Ссылка
- Тип класса
- Ссылка
null
, ссылка на экземпляр такого типа класса или ссылка на экземпляр любого класса, производного от такого типа класса
- Ссылка
- Тип интерфейса
- Ссылка
null
, ссылка на экземпляр типа класса, который реализует такой тип интерфейса, или ссылка на упакованное значение типа значения, которое реализует такой тип интерфейса
- Ссылка
- Тип массива
- Ссылка
null
, ссылка на экземпляр такого типа массива или ссылка на экземпляр любого совместимого типа массива
- Ссылка
- Тип делегата
- Ссылка
null
или ссылка на экземпляр совместимого типа делегата
- Ссылка
Структура программы
В C# основными понятиями организационной структуры являются *программы _, пространства имен, типы, элементы и сборки. В программе объявляются типы, которые содержат члены. Эти типы можно организовать в пространства имен. Примерами типов являются классы, структуры и интерфейсы. К членам относятся поля, методы, свойства и события. При компиляции программы на C# упаковываются в сборки. Сборка — это файл, обычно с расширением .exe
или .dll
, если она реализует приложение или _*библиотеку**, соответственно.
В качестве небольшого примера рассмотрим сборку, содержащую следующий код:
namespace Acme.Collections;
public class Stack<T>
{
Entry _top;
public void Push(T data)
{
_top = new Entry(_top, data);
}
public T Pop()
{
if (_top == null)
{
throw new InvalidOperationException();
}
T result = _top.Data;
_top = _top.Next;
return result;
}
class Entry
{
public Entry Next { get; set; }
public T Data { get; set; }
public Entry(Entry next, T data)
{
Next = next;
Data = data;
}
}
}
Полное имя этого класса: Acme.Collections.Stack
. Этот класс содержит несколько членов: поле с именем _top
, два метода с именами Push
и Pop
, а также вложенный класс с именем Entry
. Класс Entry
, в свою очередь, содержит три члена: свойство с именем Next
, свойство с именем Data
и конструктор. Stack
— это универсальный класс. Он имеет параметр одного типа T
, который замещается конкретным типом при использовании.
Стек — это коллекция типа FILO (прибыл первым — обслужен последним). Новые элементы добавляются в верх стека. Удаляемый элемент исключается из верхней части стека. В предыдущем примере объявляется тип Stack
, который определяет хранилище и поведение для стека. Можно объявить переменную, которая ссылается на экземпляр типа Stack
для использования этой возможности.
Сборки содержат исполняемый код в виде инструкций промежуточного языка (IL) и символьную информацию в виде метаданных. Перед выполнением JIT-компилятор среды CLR .NET преобразует код IL в сборке в код, зависящий от процессора.
Сборка полностью описывает сама себя и содержит весь код и метаданные, поэтому в C# не используются директивы #include
и файлы заголовков. Чтобы использовать в программе C# открытые типы и члены, содержащиеся в определенной сборке, вам достаточно указать ссылку на эту сборку при компиляции программы. Например, эта программа использует класс Acme.Collections.Stack
из сборки acme.dll
:
class Example
{
public static void Main()
{
var s = new Acme.Collections.Stack<int>();
s.Push(1); // stack contains 1
s.Push(10); // stack contains 1, 10
s.Push(100); // stack contains 1, 10, 100
Console.WriteLine(s.Pop()); // stack contains 1, 10
Console.WriteLine(s.Pop()); // stack contains 1
Console.WriteLine(s.Pop()); // stack is empty
}
}
Для компиляции программы вам потребуется создать ссылку на сборку, содержащую класс стека, определенный в примере выше.
Программы C# можно хранить в нескольких исходных файлах. При компиляции программы C# все исходные файлы обрабатываются вместе, при этом они могут свободно ссылаться друг на друга. По сути, это аналогично тому, как если бы все исходные файлы были объединены в один большой файл перед обработкой. В C# никогда не используются опережающие объявления, так как порядок объявления, за редким исключением, не играет никакой роли. В C# нет требований объявлять только один открытый тип в одном исходном файле, а также имя исходного файла не обязано совпадать с типом, объявляемом в этом файле.
Такие организационные блоки описываются в других статьях этого обзора.