Typdeklaration

29/11/2008 - 06:16 von Karsten Sosna | Report spam
Hallo NG,
warum geht das, trotz "Option Strinct On"?

Dim si As Single = Math.PI

Das hingegen geht nicht:

Dim si As Single = Math.Atan2(1, 0)

Math.PI ist doch als Double deklariert. Das die zweite Zuweisung nicht
funktioniert ist schon klar, aber warum funktioniert die Erste?

Danke für jede Erklàrung.
Gruß Scotty
 

Lesen sie die antworten

#1 Peter Fleischer
29/11/2008 - 07:01 | Warnen spam
"Karsten Sosna" schrieb im Newsbeitrag
news:ec$

warum geht das, trotz "Option Strinct On"?

Dim si As Single = Math.PI

Das hingegen geht nicht:

Dim si As Single = Math.Atan2(1, 0)

Math.PI ist doch als Double deklariert. Das die zweite Zuweisung nicht
funktioniert ist schon klar, aber warum funktioniert die Erste?



Hi Karsten,
der Compiler nimmt den Wert der Konstanten und tràgt diesen Wert am Ort der
Nutzung ein (wie ein Literal). Damit die der Typ der eigentlichen
Deklaration in bestimmten Grenzen ohne Bedeutung, solange der Wert zum Typ
der Nutzung passt. Das kannst du leicht prüfen z.B. mit:

Dim c As Double= 33.33
...
Dim x As Single = c ' funktioniert

Dim c As Long = 3333
...
Dim x As integer = c ' funktioniert

Dim C As Long = 33333333
...
Dim x As Integer = c ' funktioniert nicht

Dim c As Long = 3333
...
Dim x As Decimal= c ' funktioniert

Bezüglich Typen funktioniert Narrowing in C# nicht, Widening funktioniert
auch in C#:

const long c = 333;
...
double x = c;

Ich würde das VB-Verhalten als eine Unterstützung der RAD einordnen, wobei
das für den Fall "Narrowing Double to Single mit Option Strict On" nicht
sauber ist im Gegensatz zu C#.

Viele Grüsse
Peter

Ähnliche fragen