| |

VB.NET - Ein- und UmsteigerRe: Probleme mit Option Strict On | |  | Autor: Manfred X | Datum: 11.10.14 06:16 |
| OPTION STRICT ON (Dokumentation):
- schränkt die impliziten Datentypkonvertierungen auf ausschließlich
Erweiterungskonvertierungen ein,
- lässt eine späte Bindung nicht zu
- lässt keine implizite Typisierung zu, die einen Object-Typ ergibt.
http://msdn.microsoft.com/de-de/library/zcd4xwzs.aspx
Variable besitzen einen Datentyp. durch den festgelegt ist, welche Information in der
Variable gespeichert werden kann.
OPTION STRICT ON achtet darauf, daß bei der Zuweisung eines Wertes oder
einer Referenz auf eine Variable der Datentyp paßt.
Eine Erweiterungskonvertierung liegt vor, wenn die Ziel-Variable einer
Zuweisung zwar nicht identisch mit dem Typ der zugewiesenen Information ist,
diesen Typ aber trotzdem speichern kann - eventuell unter Inkaufnahme eines
Informationsverlustes:
http://msdn.microsoft.com/de-de/library/aa711609%28v=vs.71%29.aspx
http://msdn.microsoft.com/de-de/library/k1e94s7e.aspx
Eine Ganzzahlvariable des Datentyps Long (64 Byte) kann alle Werte des
Datentyps Integer (32 Byte) verlustfrei aufnehmen.
Eine Gleitkommavariable des Datentyps Double (64 Byte) kann zwar aufgrund
der zulässigen Wertespannweite (Double.MinValue, Double.MaxValue) die
Informationen des Typs Long (64 Byte) aufnehmen - aber nur mit Genauigkeitsverlust
insbesondere bei hohen Ausprägungen des Wertes:
Dim lng As Long = 12345678987554321
Dim dbl As Double = lng '12345678987554320.0
Eine späte Bindung liegt vor, wenn der Datentyp einer Information
erst zur Laufzeit eines Programms festgelegt werden kann.
Beim Programmieren kann noch nicht festgestellt werden, ob der Datentyp
der Ziel-Variable sich zum Speichern einer bestimmten Information eignet.
http://msdn.microsoft.com/de-de/library/0tcf61s1.aspx
Bei "später Bindung" sind Variablen des Typs "Object" im Spiel.
Solche Variablen können jede mögliche Information speichern.
Zuweisungen zu Object-Variablen können von der Entwicklungsumgebung beim
Programm-Entwurf nicht überwacht werden.
Während der Laufzeit eines Programms kann eine Object-Variable
nacheinander unterschiedliche Arten von Information aufnehmen.
Die implizite Typisierung liegt vor, wenn der Typ einer Variable im Code nicht
durch Dim <Variable> AS <Typ> festgelegt wird, sondern aus dem Typ der
zugewiesenen Information ermittelt wird.
Von Interesse ist hier vor allem der "lokale Typ-Rückschluß", der sich durch
OPTION INFER OFF abschalten läßt.
http://msdn.microsoft.com/de-de/library/bb384665.aspx
http://www.vbarchiv.net/tipps/details.php?id=1806
Bei "Option Strict On" wird verhindert, daß es im Rahmen der impliziten Typisierung
einer Variablen zur Festlegung des Datentyps "Object" kommen kann.
Die Text-Eigenschaft einer Textbox speichert eine Zeichenfolge (String).
Will man eine Zahl strict zuweisen, muß diese Zahl zunächst in eine Zeichenfolge
umgewandelt werden:
Dim Integ As Integer = 234
Textbox1.Text = Integ.ToString
Textbox1.Text = CStr(Integ) Möchte man den Inhalt der Text-Eigenschaft auf eine Ganzzahlvariable zuweisen,
muß zunächst kontrolliert werden, ob die enthaltene Zeichenfolge diese Umwandlung erlaubt.
Auch die Zeichenfolgen "ZWEI" oder "II" lassen sich nicht direkt in eine Zahl umwandeln -
dafür wäre die Anwendung einer speziellen Methode erforderlich.
Dim Integ as Integer
If not Integer.TryParse(Textbox1.Text, Integ) then
msgbox("Umwandlung nicht möglich")
End if Die Zelle eines DatgridView-Control kann recht unterschiedliche Informationen enthalten:
Texte, Zahlen, Bilder, Symbole,....
Aus diesem Grund liefert die "Value"-Eigenschaft einer "DatagridViewCell" die gespeicherten
Informationen in einer Variable des allgemeinen Datentyps "Object" zurück.
Wenn man diese Variable mit einer anderen Variable vergleichen möchte, ist zur Entwurfszeit
keine Kontrolle des Datentyps möglich. Bei "Strict On" meckert deshalb die IDE.
Auch in diesem Fall ist im Code die Kontrolle des Datentyps erforderlich.
Dafür gibt es verschiedene Möglichkeiten:
Dim Integ as Integer
If not TypeOf dg.Rows(0).Cells(0).Value Is Integer Then
MsgBox "Kein Integer"
else
integ = CInt(dg.Rows(0).Cells(0).Value)
End If
If Not dg.Rows(0).Cells(0).Value.GetType.Equals(GetType(Integer)) Then
Msgbox "Kein Integer"
else
integ = Convert.ToInt32(dg.Rows(0).Cells(0).Value)
End If
If not Integer.TryParse(dg.Rows(0).Cells(0).value.ToString, Integ) Then
msgbox "Kein Integer"
End if |  |
 | Sie sind nicht angemeldet! Um auf diesen Beitrag zu antworten oder neue Beiträge schreiben zu können, müssen Sie sich zunächst anmelden.
Einloggen | Neu registrieren |
  |
|
vb@rchiv CD Vol.6 vb@rchiv Vol.6
Geballtes Wissen aus mehr als 8 Jahren vb@rchiv!
Online-Update-Funktion Entwickler-Vollversionen u.v.m.Jetzt zugreifen Tipp des Monats Neu! sevCoolbar 3.0 
Professionelle Toolbars im modernen Design!
Mit sevCoolbar erstellen Sie in wenigen Minuten ansprechende und moderne Toolbars und passen diese optimal an das Layout Ihrer Anwendung an (inkl. große Symbolbibliothek) - für VB und MS-Access Weitere Infos
|
|
|
Copyright ©2000-2025 vb@rchiv Dieter Otter Alle Rechte vorbehalten.
Microsoft, Windows und Visual Basic sind entweder eingetragene Marken oder Marken der Microsoft Corporation in den USA und/oder anderen Ländern. Weitere auf dieser Homepage aufgeführten Produkt- und Firmennamen können geschützte Marken ihrer jeweiligen Inhaber sein.
Diese Seiten wurden optimiert für eine Bildschirmauflösung von mind. 1280x1024 Pixel
|
|