Почему C # статически типизирован? - PullRequest
31 голосов
/ 13 мая 2009

Я веб-программист PHP, который пытается изучать C #.

Я хотел бы знать, почему в C # требуется указывать тип данных при создании переменной.

Class classInstance = new Class();

Зачем нам нужно знать тип данных перед экземпляром класса?

Ответы [ 17 ]

1 голос
/ 13 мая 2009

Когда мы определяем переменные для хранения данных, мы должны указать тип данных, которые будут храниться в этих переменных. Затем компилятор проверяет, имеет ли смысл то, что мы делаем с данными, то есть следует правилам. Мы не можем, например, хранить текст в числе - компилятор не допустит этого.

int a = "fred"; // Not allowed. Cannot implicitly convert 'string' to 'int' 

Переменная a имеет тип int, и присвоение ей значения "fred", которое представляет собой текстовую строку, нарушает правила - компилятор не может выполнить какой-либо преобразование этой строки.

1 голос
/ 13 мая 2009

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

1 голос
/ 13 мая 2009

c # - язык со строгой типизацией, такой как c ++ или java. Поэтому ему нужно знать тип переменной. Вы можете немного выдумать это в c # 3.0 через ключевое слово var. Это позволяет компилятору выводить тип.

1 голос
/ 13 мая 2009

Поскольку C # является строго типизированным языком

0 голосов
/ 14 июня 2013

Почему в C # требуется указывать тип данных при создании переменной.

Почему нам нужно знать тип данных перед экземпляром класса?

Я думаю, что одна вещь, на которую большинство ответов не ссылались, это тот факт, что C # был изначально предназначенным и разработанным как "управляемый", "безопасный" язык среди других вещей, и многие из этих целей достигнуты при статической проверке во время компиляции. Знание типа данных переменной явно значительно облегчает решение этой проблемы. Это означает, что можно выполнить несколько автоматических оценок (компилятор C #, а не JIT) на предмет возможных ошибок / нежелательного поведения, даже не допуская выполнения.

Эта проверяемость как побочный эффект также дает вам лучшую читабельность, инструменты разработки, стабильность и т. Д., Потому что если автоматизированный алгоритм может лучше понять, что будет делать код при его запуске, то вы тоже можете:)

0 голосов
/ 07 мая 2015

Статически типизированный означает, что Compiler может выполнять какие-то проверки во время компиляции, а не во время выполнения. Каждая переменная имеет определенный или сильный тип в статическом типе. C # строго определенно строго типизирован.

0 голосов
/ 29 декабря 2009

Статическая типизация также позволяет компилятору улучшить оптимизацию и пропустить определенные шаги. Возьмем, к примеру, перегрузку, когда у вас есть несколько методов или операторов с одинаковыми именами, отличающимися только своими аргументами. При использовании динамического языка среда выполнения должна оценивать каждую версию, чтобы определить, какое из них лучше всего подходит. С таким статическим языком конечный код просто указывает на соответствующую перегрузку.

Статическая типизация также помогает в обслуживании и рефакторинге кода. Мой любимый пример - функция переименования многих более сложных IDE. Благодаря статической типизации IDE может с уверенностью найти каждое вхождение идентификатора в вашем коде и оставить нетронутыми идентификаторы с тем же именем.

Я не заметил, было ли это упомянуто или нет, но в C # 4.0 введена динамическая проверка VIA ключевого слова dynamic. Хотя я уверен, что вы захотите избежать этого, когда в этом нет необходимости.

...