Потому что C# — это строго типизированный язык… с дискретными штрихами снисходительности ;)
Если вы когда-либо работали с C#, вы знаете, что этот язык программирования — это то, что мы называем строго типизированным языком: ваши переменные, ваши константы и любое выражение, результатом которого является значение, должны иметь тип. Этот тип, в свою очередь, определяет, что может и чего не может делать переменная, где ее можно использовать, что должна показывать ваша IDE для автодополнения…
Чтобы удовлетворить наши повседневные потребности, язык предлагает довольно много встроенных типов (таких как int
, float
, string
...), и вы можете очень легко импортировать некоторые основные библиотеки, такие как System.Collections.Generic
, чтобы иметь List
, Dictionary
и т. д. .
Это здорово, потому что гарантирует, что вы используете правильный тип переменной в нужном месте и что для каждой строки вашего кода вы точно знаете, с каким типом значения вы имеете дело.
Примечание. Другие языки, такие как Python, которые не навязывают типизацию и полагаются на утиную печать, иногда могут «обмануть» новичков своей простотой… прежде чем вы поймете, что случайно заменили параметр value
(целое число) на другое (строковое) value
вычисление в вашей функции!
Но иногда эта типизация также может быть немного тяжелой, излишней или даже неполной. Вот почему в C# вы также можете воспользоваться преимуществами неявных, анонимных и нулевых типов.
Уловка №1: неявные типы
Вы когда-нибудь сталкивались с ключевым словом var
? Этот небольшой инструмент — очень удобный способ неявного ввода локальной переменной; таким образом, вам не нужно указывать тип самостоятельно — это сам компилятор выведет его из контекста во время компиляции.
Конечно, этот метод требует, чтобы ваша переменная имела значение при ее объявлении (иначе компилятору не с чем будет работать!). Но очень здорово сократить свой код: вы можете использовать его для локальных переменных, в for
или foreach
циклах, а using
файл или поток...
using System; public class Program { public static void Run() { var s = "Hello!"; Console.WriteLine($"type(s) = {s.GetType()}"); var i = 32; Console.WriteLine($"type(i) = {i.GetType()}"); var f = -2.4f…