Newsgroup: it.comp.lang.visual-basic
Titolo: [?][.NET] imports exports chetimports...

Ecco un piccolo quesito per chi ne capisce più di me:
Questo è un semplicissimo esempio che ho compilato per vedere come fa il
vb.net
 a gestire le conversioni implicite.
basta copiarlo in un filettino e lanciare il vbc miofile.vb
-----------------
Option Strict Off
Option Explicit On
Imports System
Module Module1
Sub Main()
    Dim o As Object
    Dim b As Object
    o = 12.58
    b = o * o
    Console.WriteLine(o.GetType.ToString())
End Sub
End Module
------------
Come si può notare l'unico namespace importato è System (il ns base).
Questo è quanto mi da ildasm sul miofile.exe
------------
.method public static void  Main() cil managed
{
  .entrypoint
  .custom instance void [mscorlib]System.STAThreadAttribute::.ctor() = ( 01
00 00 00 )
  // Code size       40 (0x28)
  .maxstack  2
  .locals init (object V_0,
           object V_1)
  IL_0000:  ldc.r8     12.58
  IL_0009:  box        [mscorlib]System.Double
  IL_000e:  stloc.1
  IL_000f:  ldloc.1
  IL_0010:  ldloc.1
  IL_0011:  call       object
[Microsoft.VisualBasic]Microsoft.VisualBasic.CompilerServices.ObjectType::Mu
lObj(object,
object)
  IL_0016:  stloc.0
  IL_0017:  ldloc.1
  IL_0018:  callvirt   instance class [mscorlib]System.Type
[mscorlib]System.Object::GetType()
  IL_001d:  callvirt   instance string [mscorlib]System.Type::ToString()
  IL_0022:  call       void [mscorlib]System.Console::WriteLine(string)
  IL_0027:  ret
} // end of method Module1::Main
------------
Che è [mscorlib]?
Ma soprattutto... da dove viene fuori il richiamo a [Microsoft.VisualBasic]
che a quanto pare è quello che si occupa delle conversioni?
A quanto pare è un altro motivo per usare lo Strict On, ma a me serviva
proprio capire come VB gestisse il passaggio (in particolare la promozione)
da un tipo all'altro senza sapere il tipo di partenza e di arrivo a priori.
Ciao a tutti
--
using System.Gtk.Forms = "
http://www.neodatatype.net/windowsforms/sgf.aspx
"
mathParser = "
http://www.neodatatype.net
"
sitoComune = "
http://www.it-lang-vb.net
"

MSCorLib è la cosidetta BCL base class library ovvero la parte del framework
che (tra le altre cose) contiene il common type systm ovvero tutti i tipi
base (quale object, Int32...)
Riguardo la presenza di  [Microsoft.VisualBasic] sembrerebbe una funzione
offerta dal compiler VB che ti permette di moltiplicare due oggetti
(probabilemete effttuando un unboxing prima e un boxing dopo) infatti se
casti a double i due oggetti, la presenza di  [Microsoft.VisualBasic]
sparisce
Module Module1
   Sub Main()
      Dim o As Object
      Dim b As Object
      o = 12.58
      b = Convert.ToDouble(o) * Convert.ToDouble(o)
      Console.WriteLine(o.GetType.ToString())
   End Sub
End Module
.method public static void  Main() cil managed
{
  .entrypoint
  .custom instance void [mscorlib]System.STAThreadAttribute::.ctor() = ( 01
00 00 00 )
  // Code size       64 (0x40)
  .maxstack  2
  .locals init ([0] object b,
           [1] object o)
  IL_0000:  nop
  IL_0001:  ldc.r8     12.58
  IL_000a:  box        [mscorlib]System.Double
  IL_000f:  stloc.1
  IL_0010:  ldloc.1
  IL_0011:  call       object
[mscorlib]System.Runtime.CompilerServices.RuntimeHelpers::GetObjectValue(obj
ect)
  IL_0016:  call       float64 [mscorlib]System.Convert::ToDouble(object)
  IL_001b:  ldloc.1
  IL_001c:  call       object
[mscorlib]System.Runtime.CompilerServices.RuntimeHelpers::GetObjectValue(obj
ect)
  IL_0021:  call       float64 [mscorlib]System.Convert::ToDouble(object)
  IL_0026:  mul
  IL_0027:  box        [mscorlib]System.Double
  IL_002c:  stloc.0
  IL_002d:  ldloc.1
  IL_002e:  callvirt   instance class [mscorlib]System.Type
[mscorlib]System.Object::GetType()
  IL_0033:  callvirt   instance string [mscorlib]System.Type::ToString()
  IL_0038:  call       void [mscorlib]System.Console::WriteLine(string)
  IL_003d:  nop
  IL_003e:  nop
  IL_003f:  ret
} // end of method Module1::Main
Prendila così comè, non sono un esperto di IL...
HTH
-- 
Corrado Cavalli [Microsoft MVP]
UGIdotNET - 
http://www.ugidotnet.org

 sparisce
Infatti, la cosa che mi sembra incongruente è che il vbc si "permette" di
infilarmi il [Microsoft.VisualBasic] a mia insaputa e contro le mie
indicazioni.
Potrebbe perlomeno avvertire che per fare questa operazione è necessario
includerlo.
Ciao


includerlo.
Storicamente uno degli scopi del vb e' quello di "nascondere" cio'
che succede veramente sulla macchina.
Questa scelta si e' rivelata vincente nel recente passato (vista la
quantita' di codice vb in giro) e potrebbe continuare ad esserlo.
-- 
ciao, hal