2010-01-24 2 views
13

Подбор C#, похоже, не может найти полезной ссылки на это, кроме примеров.Что такое эквивалент оператора VB «Dim» в C#?

Итак, что такое Dim in C#?

+1

Вы спрашиваете, что такое эквивалент C# для VB.net Dim? – spender

+0

В этом отношении, что в мире означает 'Dim' для VB.NET? Я знаю, для чего он используется, но я до сих пор не знаю, что это значит. –

+0

@Ben Dim не подходит для измерения – PeanutPower

ответ

18

В VB Dim объявляет переменную определенного типа (или переменной типа, если вы ее не укажете). Если вы Dim x as Foo, который объявляет переменную типа Foo под названием x.

В C# эквивалент должен указать тип с последующим именем переменной, например:

Foo x; 
int i; 

Вы можете также назначить в том же шаге:

Foo x = new Foo(); 
int i = 6; 

C# поддерживает определение типа , так что вы можете сделать:

// Compiler infers type of x and i based on this assignment. 
var x = new Foo(); // x is now of type Foo 
var i = 10;  // i is now of type int 

Dim без соответствующего типа в VB аналогично чтобы объявить тип как Object в C#:

object o = ...; // An object instance can hold any value or reference type. 
+1

Да, но var был представлен в основном для LINQ, и если вы делаете 'var MyVar = 500; MyVar = "Change to String"; 'Вы получите сообщение об ошибке .. другие языки не имеют этого ограничения – 2010-01-24 16:25:50

+0

Последнее является примером неявно типизированной переменной; тип вывода отличается. – jason

+1

@Roboto: C# в значительной степени статически типизирован.Вы не можете делать то, что вы описываете, потому что тип переменной не изменен: как только вы объявляете тип, так оно и остается. @ Джейсон: Непосредственная типизация не может произойти без вывода типа. Они довольно тесно связаны. По сути, вывод типа - это то, что происходит с правой стороны, так что компилятор может привязать 'i' к определенному типу. –

1

Аналогичный эквивалент будет как

object Obj; 

или любого другого типа данных, таких как

int myInt; 
string myString; 

var также может быть использован в качестве неявно типизированных. Другие будут явно напечатаны. var был представлен для запросов LINQ.

16

Предполагая, что вы имеете в виду Dim в VB, C# использует либо var или имя типа, чтобы объявить новый тип

string myString = "Hello"; 
// is the same as 
var myString = "Hello"; // type is inferred 

Обратите внимание, что var ключевого слова не является вариантом типа, как в VB. Это implicitly typed variable.

0

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

+0

Downvoted; в C# нет эквивалента «Dim». В VB ключевое слово Dim используется для объявить переменную. В C# это намерение подразумевается при использовании типа для начала оператора. Ключевое слово var в C# можно использовать вместо имени типа, но оно по-прежнему является сильным типом, и для этого требуется, чтобы переменная была инициализируется в том же самом заявлении. Тип, используемый для переменной, выводится из типа данных, присвоенных va riable. –

+1

Вы абсолютно правы, единственное, что делает Dim ** примерно ** эквивалентным var, заключается в том, что они используются для объявления переменной на обоих языках. Однако в версии 9 VB, включив опцию Infer, вы можете заставить их вести себя очень похожим образом. –

0

Я могу предложить Learning C# 3.0 (а позже, возможно, C# 3.0 in a Nutshell и C# in Depth), чтобы узнать C#. Вероятно, это хорошая идея, чтобы изучить основы языка и начать «думать в C#», вместо того, чтобы пытаться «переводить» или «преобразовывать» ваши мысли с VB на C# (или на любой другой язык, если на то пошло).


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

+1

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

+0

@Skeet: Я согласен. Полагаю, мне следовало бы более ясно сказать об этом. Первая из них (Learning C# 3.0) была отличной книгой для начала, по крайней мере, я так и думал. PS: Для меня большая честь прокомментировать мой ответ ^^ – Leif

7

Это на самом деле немного сложно, потому что Dim может использоваться несколькими способами. Первый случай - если вы явно указываете тип переменной при ее объявлении. В этом случае она соответствует C# декларации, которая содержит имя типа:

// Visual Basic 
Dim num as Integer 
// C# 
int num; 

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

// Visual Basic 
Dim str = "Hello world" 
// C# 
var str = "Hello world" 

Наконец, третий случай - вы можете объявить переменный Basic Визуальных без указания типа и без предоставления выражения инициализации (по крайней мере, с Option Strict выключено). В этом случае VB.NET объявляет переменную как значение типа Object, но также позволяет вам вызывать любые методы объекта. Это довольно близко к тому, что C# 4.0 делает с новым dynamic ключевым словом:

// Visual Basic 
Dim sth 
sth = new Random() 
sth.Next() 

// C# 
dynamic sth; 
sth = new Random(); 
sth.Next(); 

[EDIT]
Наконец, последний случай использования Dim в Visual Basic является объявлять массивы. В C# массивы рассматриваются как только другой тип данных, поэтому заявление похоже на то, что я писал ранее для целых/строк:

// Visual Basic 
Dim ints(10, 10) as Integer 
// C# - we need to initialize the array if size is specified 
int[,] ints = new int[10, 10]; 
// C# - we can use type inference too 
var ints = new int[10, 10]; 

[/ EDIT]

(я действительно не VB эксперт, но я думаю, что это три возможных случая. Пожалуйста, поправьте меня, если я ошибаюсь!)

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