#basics
№1. Метод Main() и его сигнатура
Стандартной точкой входа для приложений, разработанных на языке C# является статический метод с именем Main.
В большинстве случаев его объявление выглядит следующим образом:
№1. Метод Main() и его сигнатура
Стандартной точкой входа для приложений, разработанных на языке C# является статический метод с именем Main.
В большинстве случаев его объявление выглядит следующим образом:
static void Main(string[] args)
Начиная с C# 7.1 появилась возможность объявлять его в асинхронном виде:static Task<int> Main(string[] args)
@csharp_1001_notes#basics
№2. Минимально возможная программа на C#
Минимально возможная программа на языке C# будет состоять из класса, содержащего статический метод
@csharp_1001_notes
№2. Минимально возможная программа на C#
Минимально возможная программа на языке C# будет состоять из класса, содержащего статический метод
Main()
. using System;При этом namespace и параметр args так же являются необязательными.
namespace ConsoleApplication1
{
class Program
{
static void Main(string[] args)
{
Console.WriteLine("It's just a start..");
}
}
}
@csharp_1001_notes
#basics
№3. Кто автор языка C#
Язык C# был разработан группой инженеров компании Microsoft для платформы .NET в далёком 2000 году и изначально имел кодовое название COOL (C-style Object Oriented Language).
Главным архитектором является датский инженер-программист Anders Hjelsberg.
C# относится к семье языков с C-подобным синтаксисом, из них его синтаксис наиболее близок к C++ и Java.
@csharp_1001_notes
№3. Кто автор языка C#
Язык C# был разработан группой инженеров компании Microsoft для платформы .NET в далёком 2000 году и изначально имел кодовое название COOL (C-style Object Oriented Language).
Главным архитектором является датский инженер-программист Anders Hjelsberg.
C# относится к семье языков с C-подобным синтаксисом, из них его синтаксис наиболее близок к C++ и Java.
@csharp_1001_notes
X (formerly Twitter)
Anders Hejlsberg (@ahejlsberg) on X
Technical Fellow at Microsoft
#basics
№4. Чем C# отличается от Java
Оба языка программирования являются объектно-ориентированными, унаследовали свой синтаксис от языка Си и исполняются в управляемой среде.
Как бы то ни было, между ними есть и различия. Далее основные из них:
🔶 class B extends A равнозначно class B : A
🔶 В Java отсутствуют namespace
🔶 В C# для синхронизации доступа между потоками используется lock, в то время как в Java synchronized
🔶 Наличие в С# модификатора доступа internal
🔶 Перечисления (enum) в Java являются полноценными классами 😲
🔶 C# позволяет использовать строковые литералы в конструкции switch
🔶 Программы на C# используют .NET Framework, в случае с Java это платформа Java SE.
@csharp_1001_notes
№4. Чем C# отличается от Java
Оба языка программирования являются объектно-ориентированными, унаследовали свой синтаксис от языка Си и исполняются в управляемой среде.
Как бы то ни было, между ними есть и различия. Далее основные из них:
🔶 class B extends A равнозначно class B : A
🔶 В Java отсутствуют namespace
🔶 В C# для синхронизации доступа между потоками используется lock, в то время как в Java synchronized
🔶 Наличие в С# модификатора доступа internal
🔶 Перечисления (enum) в Java являются полноценными классами 😲
🔶 C# позволяет использовать строковые литералы в конструкции switch
🔶 Программы на C# используют .NET Framework, в случае с Java это платформа Java SE.
@csharp_1001_notes
#basics
Чем C# отличается от VB .NET
Оба этих языка являются высокоуровневыми и входят в перечень языков программирования для платформы .NET. В основном их отличия синтаксические, но есть и более значительные.
О последних далее:
Есть в C# (нет в VB .NET):
🔶 Указатели и возможность писать unsafe код
🔶 Статические классы
🔶 Контроль переполнения checked/unchecked
🔶 Чувствительность к регистру (case-sensivity)
🔶 Более строгая проверка типов
🔶 Синтаксический сахар (делает язык менее многословным)
Есть в VB .NET (нет в C#):
🔶 XML литералы
🔶 Вспомогательные методы IsNumeric и PMT
🔶 Inline объявление дат, например #12/31/2000#
🔶 Оператор Like для сравнения строки с шаблоном
От себя замечу, что на сегодняшний день большинство проектов, которые продолжают использовать VB .NET являются скорее legacy (требующие сопровождения и исправления ошибок, нежели активной разработки).
C#, напротив, уверенно занял лидерство в качестве основного языка разработки для платформы .NET 😉
💬 Крайне показательным в этом случае являются результаты опроса на StackOverflow за 2018, в котором 34.4% опрошенных указали, что используют C#, в то время как у VB .NET эта цифра едва дотягивает до 6.8%.
@csharp_1001_notes
Чем C# отличается от VB .NET
Оба этих языка являются высокоуровневыми и входят в перечень языков программирования для платформы .NET. В основном их отличия синтаксические, но есть и более значительные.
О последних далее:
Есть в C# (нет в VB .NET):
🔶 Указатели и возможность писать unsafe код
🔶 Статические классы
🔶 Контроль переполнения checked/unchecked
🔶 Чувствительность к регистру (case-sensivity)
🔶 Более строгая проверка типов
🔶 Синтаксический сахар (делает язык менее многословным)
Есть в VB .NET (нет в C#):
🔶 XML литералы
🔶 Вспомогательные методы IsNumeric и PMT
🔶 Inline объявление дат, например #12/31/2000#
🔶 Оператор Like для сравнения строки с шаблоном
От себя замечу, что на сегодняшний день большинство проектов, которые продолжают использовать VB .NET являются скорее legacy (требующие сопровождения и исправления ошибок, нежели активной разработки).
C#, напротив, уверенно занял лидерство в качестве основного языка разработки для платформы .NET 😉
💬 Крайне показательным в этом случае являются результаты опроса на StackOverflow за 2018, в котором 34.4% опрошенных указали, что используют C#, в то время как у VB .NET эта цифра едва дотягивает до 6.8%.
@csharp_1001_notes
❇️ Рабочая неделя заканчивается, а значит у нас будет больше времени поломать голову и поразбираться с нюансами языка C#.
Предлагаю вашему внимаю самые 🔥 интересные вопросы этой недели:
🔶 Readonly struct vs classes
🔶 Why is the call ambiguous?
🔶 What happens when creating a variable?
🔶 Random values seem to be not really random?
Всем хороших и плодотворных выходных 👍
#sof_weekly
Предлагаю вашему внимаю самые 🔥 интересные вопросы этой недели:
🔶 Readonly struct vs classes
🔶 Why is the call ambiguous?
🔶 What happens when creating a variable?
🔶 Random values seem to be not really random?
Всем хороших и плодотворных выходных 👍
#sof_weekly
Stack Overflow
Readonly struct vs classes
Assuming you only have immutable types
and you have all your code up to date to C# 7.3 and your methods are using the in keyword for inputs
Why would you ever use a class instead of a readonly str...
and you have all your code up to date to C# 7.3 and your methods are using the in keyword for inputs
Why would you ever use a class instead of a readonly str...
#basics
Абсолютно минимально возможная программа на C# и Quine
🔶 Ранее в заметке №2 я уже публиковал минимально возможную программу на C#, однако упомянул, что некоторые её части так же опциональны.
Дабы исправить эту оговорку , далее будет действительно самая маленькая (состоящая исключительно из обязательных частей) программа:
Куайн (квайн, англ. quine) — компьютерная программа, которая выдаёт на выходе точную копию своего исходного текста.
Заинтригованы? Тогда попробуйте написать куайн на C# самостоятельно 😉
p.s. Один из многочисленных вариантов вы сможете найти по ссылке.
@csharp_1001_notes
Абсолютно минимально возможная программа на C# и Quine
🔶 Ранее в заметке №2 я уже публиковал минимально возможную программу на C#, однако упомянул, что некоторые её части так же опциональны.
Дабы исправить эту оговорку , далее будет действительно самая маленькая (состоящая исключительно из обязательных частей) программа:
class Program🔶 Довольно интересным типом программ, на мой взгляд, являются Куайны (Quine), названные так в честь американского логика и философа Willard Van Orman Quine (1908—2000).
{
static void Main()
{
}
}
Куайн (квайн, англ. quine) — компьютерная программа, которая выдаёт на выходе точную копию своего исходного текста.
Заинтригованы? Тогда попробуйте написать куайн на C# самостоятельно 😉
p.s. Один из многочисленных вариантов вы сможете найти по ссылке.
@csharp_1001_notes
Telegraph
C# quine
using System;class A{static void Main(){string s = @"using System;class A{{static void Main(){{string s=@{0}{1}{0};Console.Write(s,'{0}',s);}}}}";Console.Write(s, '"', s);}}
#basics
Консольное приложение и класс Console
Консольный тип проектов один из самых простых и, вероятно, наиболее используемый при разработке на языке C#. Одним из определений консоли считают программное обеспечение, реализующее текстовый интерфейс.
Ниже я приведу основные методы класса Console (сигнатуры опущены намеренно ввиду наличия у некоторых из них перегрузок):
🔶 Console.Read - считать символ
🔶 Console.ReadLine - считать последовательность символов
🔶 Console.Write - отобразить значение
🔶 Console.WriteLine - отобразить значение и перевести каретку в начало ('\r') следующей строки ('\n')
Простенький пример их использования так же доступен по ссылке.
А вот и пример чуть посложнее, где автор использовал консольное приложение для небольшого "опроса" с начислением очков за правильные ответы.
💬 Почаще разбирайте код других разработчиков, чтобы набивать руку в чтении и подсматривать интересные для себя моменты, ведь программирование- это не только написание кода, но и его чтение ☝️
@csharp_1001_notes
Консольное приложение и класс Console
Консольный тип проектов один из самых простых и, вероятно, наиболее используемый при разработке на языке C#. Одним из определений консоли считают программное обеспечение, реализующее текстовый интерфейс.
Ниже я приведу основные методы класса Console (сигнатуры опущены намеренно ввиду наличия у некоторых из них перегрузок):
🔶 Console.Read - считать символ
🔶 Console.ReadLine - считать последовательность символов
🔶 Console.Write - отобразить значение
🔶 Console.WriteLine - отобразить значение и перевести каретку в начало ('\r') следующей строки ('\n')
Простенький пример их использования так же доступен по ссылке.
А вот и пример чуть посложнее, где автор использовал консольное приложение для небольшого "опроса" с начислением очков за правильные ответы.
💬 Почаще разбирайте код других разработчиков, чтобы набивать руку в чтении и подсматривать интересные для себя моменты, ведь программирование- это не только написание кода, но и его чтение ☝️
@csharp_1001_notes
#basics
Как и зачем возвращать результат выполнения метода Main
По умолчанию точка входа в наше приложение - метод Main объявлен с типом возвращаемого значения void. Однако, мы так же имеем возможность возвращать и целочисленное значение int (а начиная с C# 7.1 ещё и Task<int>):
Стоит заметить, что сделать это получится лишь в том случае, когда информация о возвращаемых значениях и способах реагирования на них будет определена заранее, как в следующем примере на powershell:
@csharp_1001_notes
Как и зачем возвращать результат выполнения метода Main
По умолчанию точка входа в наше приложение - метод Main объявлен с типом возвращаемого значения void. Однако, мы так же имеем возможность возвращать и целочисленное значение int (а начиная с C# 7.1 ещё и Task<int>):
class ProgramНужно это в первую очередь для того, чтобы код, вызывающий нашу программу, имел возможность отреагировать на результат её выполнения.
{
static int Main()
{
if (DateTime.Today.DayOfWeek == DayOfWeek.Monday)
return -1; // Monday is bad
else
return 0;
}
}
Стоит заметить, что сделать это получится лишь в том случае, когда информация о возвращаемых значениях и способах реагирования на них будет определена заранее, как в следующем примере на powershell:
dotnet run💬 А знаете ли вы, что alias void в языке C# соответствует структуре public struct Void из сборки System? 😉
if ($LastExitCode -eq 0) {
Write-Host "Execution succeeded"
} else
{
Write-Host "Execution Failed"
}
Write-Host "Return value = " $LastExitCode
@csharp_1001_notes