.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
InformationsquelleAutor mattmc3 | 2010-07-22
Schreibe einen Kommentar