.NET 4.0 framework dynamische Funktionen in VB Option Strict On?
Gibt es eine Möglichkeit, die Verwendung der neuen dynamischen Funktionen in der 4.0 framework wie ExpandoObject
im VB.NET ohne Einstellung Option Strict Off
? Mit C#, verlieren Sie geben Sicherheit nur mit den Variablen, die Sie speziell erklären, wie dynamic
. Aber mit VB, ist der einzige Weg den ich gefunden habe, die diese Funktionen verwenden, ist mit dem alten Option Strict Off
trick, der in VB.NET seit Anfang. Ohne Option Strict, alles, was in der Datei ist verschmutzt mit fuzzy-Eingabe etwa so:
Option Explicit On
Option Strict Off
Option Infer On
Partial Public Class ClassX
Public Sub TestDynamic()
Dim dyn As Object = New System.Dynamic.ExpandoObject()
Dim a As String = 1 ''# Ew!
Dim obj As Object = "999"
dyn.Str = a ''# a is a string, remember? Even though it has a number
''# dyn.Str = 1 : Type = System.String
Console.WriteLine("dyn.Str = {0} : Type = {1}", dyn.Str, dyn.Str.GetType().ToString())
dyn.Num = 123
''# dyn.Num = 123 : Type = System.Int32
Console.WriteLine("dyn.Num = {0} : Type = {1}", dyn.Num, dyn.Num.GetType().ToString())
dyn.Dbl = obj / 9
''# dyn.Dbl = 111 : Type = System.Double
Console.WriteLine("dyn.Dbl = {0} : Type = {1}", dyn.Dbl, dyn.Dbl.GetType().ToString())
dyn.Obj = obj
''# dyn.Obj = 999 : Type = System.String
Console.WriteLine("dyn.Obj = {0} : Type = {1}", dyn.Obj, dyn.Obj.GetType().ToString())
dyn.Dte = #5/5/1955#
''# dyn.Dte = 7/7/1977 12:00:00 AM : Type = System.DateTime
Console.WriteLine("dyn.Dte = {0} : Type = {1}", dyn.Dte, dyn.Dte.GetType().ToString())
AmICalled(dyn.Num)
AmICalled(dyn.Obj)
AmICalled(dyn.Str)
AmICalled(dyn.Dbl)
Try
AmICalled(dyn.Dte)
Catch
Console.WriteLine("Dates don't convert to ints I guess... but we don't know that 'till runtime")
End Try
Console.WriteLine(dyn.Num + dyn.Str) ' 124!?
Console.WriteLine(dyn.Num & dyn.Str) ' 1231!?
End Sub
Private Sub AmICalled(ByVal i As Integer)
Console.WriteLine("AmICalled was called with: " & i)
End Sub
End Class
Ist dies wirklich korrekt? Und wenn ja, was ist der beste Weg, um noch Dinge wie ExpandoObject
und mindern das Risiko des Verlustes aller Art Sicherheit? Partielle Klassen? Oder sollte ich einfach nicht so besorgt über die Art der Sicherheit in diesem Fall?
- Okay, Leute, ich habe angefangen ein Kopfgeld. Gibt es eine Möglichkeit VB.NET Entwickler können die neue .NET 4.0, dynamische Funktionen, ohne sich Option Strict Off, und so verlieren geben Sicherheit für alles, anstatt nur eine dynamische variable?
- Ich habe eine Anfrage für diese Funktion gegen VB.Net auf Microsoft Connect. Jemand mit einer Meinung die vor-oder gegen die Stimmabgabe gibt. Es gibt auch dieses blog post aus der VB-team führen.
- BTW es gibt auch einen doppelte Frage
Du musst angemeldet sein, um einen Kommentar abzugeben.
Es scheint, Sie können nicht, ohne dass man Option Strict off.
Ich werde die Forschung einige mehr aber.
Bearbeiten
Nachdem ich einige Dokumentationen auf der
ExpandoObject
es scheint, dass es verwendet wird, in C# für die COM und Office-Interop. Traditionell, in VB.NET dieObject
verwendet wurde und für diese Zwecke erfordern würde, dass Sie schalten Sie Option Strict.Zur Beantwortung Ihrer Frage, dies bedeutet, dass Sie können verwenden Sie dynamische Typen in VB.NET mithilfe der
Object
- Typ anstelle desExpandoObject
[falls eine solche vorhanden ist, in VB.NET], SatzOption Infer On
und Option Strict Auf on oder Off.Sie könnten auch erwägen, partielle Klassen, zu lokalisieren Ihre nicht Option Strict-code, um bestimmte Dateien.
Empfohlene Lektüre
Nicht. Dies ist eine Art der modernen Tag zu spät-verbindlich.
Ich habe nicht versucht, diese, und es wäre nicht schön, aber Sie sollten in der Lage sein, um verwenden Sie
CallByName
.Anpassung Ihrer Beispiel
Wie gesagt, es ist nicht schön.