2016-03-20 3 views
1

Я читаю JoeDuffy книгу, в которой он сказал: C# is a (mostly) statically typed.Является ли C# статически типизированным или в основном статически типизированным?

Большинство статей и книг, которые я читал, что описывают C#, как сильно типизированного языка эффективно используют «строго типизированным», чтобы означать статически типизированных.

Где правда? Что означает mostly? (возможно, имея в виду очень мало функций, которые выходят за пределы безопасности типа CLR?)

+4

Вот это правда: https://blogs.msdn.microsoft.com/ericlippert/2012/10/15/is-ca-strongly-typed-or-a-weakly-typed-language/ –

+2

Возможно, ссылаясь на ключевое слово 'dynamic'? – glcheetham

+0

Также по теме: http://stackoverflow.com/q/859186/447156 –

ответ

1

Наиболее очевидной нестатически типизированной частью C# является ключевое слово dynamic. Переменная, объявленная в качестве dynamic не отсрочивает проверок, связанных с типами до момента выполнения, поэтому следующий код является законным:

dynamic x = "a string"; 
x = 7; 
x.NonExistingMethod(); 

Другие части C# (в том числе var ключевое слово) статически типизированный. Люди иногда путают var с ключевым словом в JavaScript, но то, что var в C# делает это Тип вывода. Все еще статически типизировано, только менее явное.

+0

'int [] a = new int [3] {1, 2, 3}; Console.WriteLine (a [3]); ' Почему я могу создать этот код успешно? –

+0

Я думаю, что переполнение буфера или индексация в произвольное место в системной памяти просто невозможно –

+0

@ivan_petrushenko Почему бы вам не удастся? Какую часть вы ожидаете провалить?как я понимаю, индексы в C# - это в основном просто вызовы методов. Тип массива предоставляет индекс, который принимает аргумент 'int'. 3 - действительный 'int', так что здесь ничего нечего. – kai

1

Статически типизированные языки программирования проверяют тип (the process of verifying and enforcing the constraints of types) во время компиляции, а не во время выполнения. Динамически типизированные языки программирования проверяют тип во время выполнения, а не во время компиляции.

Сильная/Слабая типизация - это то, как различаются строго типы (например, пытается ли язык делать неявное преобразование из строк в числа).

Проще говоря так: на статически типизированном языке тип статический, то есть, как только вы установите переменную типа, вы НЕ МОЖЕТЕ ее изменить.

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

Язык динамически типизируется, если тип переменной интерпретируется во время выполнения. Это означает, что вы, как программист, можете писать немного быстрее, потому что вам не нужно указывать тип каждый раз. Пример: Perl, Ruby, Python

Большинство языков сценариев имеют эту функцию, так как нет никакого компилятора для статической проверки типов в любом случае, но вы можете найти ошибку, вызванную неправильным интерпретатором интерпретатора типа переменная

+1

Можете ли вы ответить на главный вопрос? Что в основном означает? –

+0

@ivan_petrushenko В C# 3.0 и более поздних версиях вы можете использовать ключевое слово «var» вместо имени типа во многих случаях. –

+4

@MidhunMundayadan ключевое слово 'var' не отпускает статическую типизацию. попробуйте wrtiting 'var x =" hi "; x = 1; 'и посмотреть, жалуется ли компилятор. ключевое слово 'dynamic'. – kai

Смежные вопросы