2011-04-15 2 views
18

Это небольшое сомнение: на VB я могу объявлять переменные, используя Dim. В C# я могу объявить, используя var. Я больше знаком с тонкостями C#, и я знаю, что var использует тип вывода для определения типа переменной. Но я не уверен, что делает «Дим».Является ли VB Dim таким же, как у C# var?

Я, кажется, this question на SO, но он не сравнивает оба ключевых слова. Если есть разница, может кто-нибудь сказать мне, что?

+1

Для получения более подробного разъяснения в дополнение к тому, что вы уже натолкнулись, исследование раннего или позднего связывания. В этом разница между ними. –

ответ

18

Это зависит от того, Option Infer is speci Fied. Как правило, следующие условия эквивалентны:

'VB.Net 
Dim myVar 
Dim myString = "Hello world!" 
Dim myString2 As String = "Hello world!" 
//C# 
object myVar; 
object myString = "Hello world!"; //Notice type is object, *not* string! 
string myString2 = "Hello world!"; 

Однако с Option Infer включена, Dim становится больше как var, когда переменная инициализируется на той же строке:

'VB.Net 
Option Infer On 
Dim myVar 
Dim myString = "Hello!" 
//C# 
object myVar; 
var myString = "Hello!"; //Or the equivalent: string myString = "Hello!"; 

Обратите внимание, что это может привести к некоторой путанице, потому что внезапная инициализация переменной в точке объявления означает нечто иное, чем ее инициализация позже :

'VB.Net 
Option Infer On 
Dim myVar1 
myVar1 = 10 
Dim myVar2 = 10 

myVar1 = New MyClass() 'Legal 
myVar2 = New MyClass() 'Illegal! - Value of type 'MyClass' cannot be converted to 'Integer' 

Это может быть исправлено путем включения Option Strict, что (помимо всего прочего) заставляет все переменные должны быть приведены тип (неявно или нет) в момент декларации.

+0

С кодом 'Option Infer On', таким как' Dim myVar1', больше не работает: 'Infer On' и' Strict Off' являются взаимоисключающими (кроме они изменили это в VB10). –

+0

@ Konrad: Я почти уверен, что это неправда. В документации [VB9 для 'Option Infer'] (http://msdn.microsoft.com/en-us/library/bb384665%28VS.90%29.aspx) указано, что' Option Strict' может быть 'On' или 'Off'. Кроме того, я просто протестировал его, и он отлично работает. –

+0

Тогда у меня должна быть неправильная память. Странно ... Я был совершенно уверен, что компилятор жаловался, если 'Infer' использовался без' Строго'. –

14

Это не то же самое. Dim в VB просто означает, что следующим является объявление переменной.

Например, эти два эквивалентны:

Dim x As String = "foo" 
string x = "foo" 

В C#, вар означает, что тип объявления переменной является вывод компилятором на основе использования (инициализации). То же самое можно сделать в VB, просто опуская тип декларации. Тем не менее, это также требует, чтобы Option Strict и Option Infer активизируются:

Dim x = "bar" ' Compiler infers type of x = string 
var x = "bar" // same here. 
1

Там в this from Scott Hanselman

Для C# вар:

... [вар это] новое ключевое слово, которое означает, «Я хочу объявить переменную, но я ' m слишком ленив, чтобы написать свой тип. "

Один из способов взглянуть на власть Dim оператора VB является сказать,

Dim вид средств, «Я хочу объявить переменную, но я не могу сказать вам много о том, как он ведет себя пока много позже. "

Dim позволяет выполнять фактическую позднюю привязку, а в C# (сегодня) вы выполняете позднюю привязку с отражением.

0

Dim означает «измерение» и используется в VB.Net для объявления переменной. В основном это подразумевает «Запасы немного/достаточно места для хранения одного типа _ _ '. Тип данных приходит позже; обычно на одной линии.

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

+0

Я думал, что это означает «объявить в памяти» –

+0

@Steve; да, ты понял! http://stackoverflow.com/questions/1033507/what-does-dim-stand-for-in-visual-basic-and-basic –

0

ключевое слово var специально набирается типом данных, назначенным ему в переменной. Но dim инвариантен, который может быть использован для любого типа.

+0

var сообщает компилятору, что вы хотите объявить определенный тип, помните, что C# Тип специфичный не как vb, который является типом/объектом, интерпретированным «STAY AWAY FROM VB» – MethodMan

2

Это зависит, в vb.net вы пишете

dim x = 1 

то это то же самое, что и C# var.

Или вы можете написать

dim x as integer = 1 

, который так же, как с #

int x = 1; 

Начиная с vb.net 9.0 вы не должны иметь тип с инициализации заявления

http://msdn.microsoft.com/en-us/library/ms364068(v=vs.80).aspx

1

Dim В VB ничего не делает сам по себе, это просто ключевое слово, что означает, что остальная часть инструкции связана с объявлением переменной. Его ключевое слово BASIC из тумана времени означает «измерение», когда вы не можете объявить обычные переменные, но вам нужно объявить «размерность» массивов.

Если вы в своем воображении игнорируете Dim и сравниваете то, что осталось, вы увидите, что VB и C# очень похожи, за исключением того, что C# делает это неправильным способом (вы можете догадаться, на каком языке я вырос) и , как и C, сначала ставит тип (или использует var), а затем имя переменной.

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