.NET onbekende syntax

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

  • Snake
  • Registratie: Juli 2005
  • Laatst online: 07-03-2024

Snake

Los Angeles, CA, USA

Topicstarter
Ik ben bezig met een oud legacy VB.NET (geschreven door een VB ontwikkelaar) te voorzien van nieuwe features.

Late binding, implicit casting, ik heb het nog zo gek niet gezien.

Maar aangezien ik niet kan leven met de gedachte van iets niet te begrijpen ben ik gaan zoeken met .NET reflector in Microsoft.VisualBasic.dll hoe die latebinding nu eigelijk werkt.

ergens wordt uiteindelijk een reflection call gemaakt, maar dat doet niet terzake voor dit topic
Nu kwam ik tijdens het browsen de volgende gekke code tegen:

C#:
1
2
3
4
5
6
7
8
9
10
11
...
   try
    {
        obj3 = callTarget.Invoke(this.m_Instance, parameters);
    }
    catch when (?)
    {
        TargetInvocationException exception;
        throw exception.InnerException;
    }
...


Eerste reactie: when? (?) ?

En dan die nullpointer die bij die throw zou moeten voorkomen. Ik snap er niets van.

Dit komt voor in de methode Microsoft.VisualBasic.CompilerServices.Symbols+Container.InvokeMethod

Afbeeldingslocatie: http://tweakers.net/ext/f/T3jdT8pEkWvfwWooN5vdHlhd/thumb.jpg Voor een screenshot :)

Kan iemand mij vertellen wat dit eigelijk is?

Ik begrijp dat when statement, C# kan dat niet weergeven, dat komt eigelijk uit VB.NET. Maar dat (?), daar kan ik echt niet aan uit.

Info over exception handling: http://community.bartdesm...finally-fault-filter.aspx

Going for adventure, lots of sun and a convertible! | GMT-8


Acties:
  • 0 Henk 'm!

  • RayNbow
  • Registratie: Maart 2003
  • Laatst online: 06:59

RayNbow

Kirika <3

Ipsa Scientia Potestas Est
NNID: ShinNoNoir


Acties:
  • 0 Henk 'm!

  • Snake
  • Registratie: Juli 2005
  • Laatst online: 07-03-2024

Snake

Los Angeles, CA, USA

Topicstarter
Dat begrijp ik :) ik doelde op het gedeelde '(?) achter de when. VB.NET laat dat ook niet toe, die (?) :)

Going for adventure, lots of sun and a convertible! | GMT-8


Acties:
  • 0 Henk 'm!

  • RayNbow
  • Registratie: Maart 2003
  • Laatst online: 06:59

RayNbow

Kirika <3

Snake schreef op vrijdag 19 februari 2010 @ 12:25:
[...]

Dat begrijp ik :) ik doelde op het gedeelde '(?) achter de when. VB.NET laat dat ook niet toe, die (?) :)
Zou het niet kunnen dat die .NET Reflector de catch/when-constructie niet goed begrijpt en dus incorrecte pseudo-C# code laat zien?

Ipsa Scientia Potestas Est
NNID: ShinNoNoir


Acties:
  • 0 Henk 'm!

  • Snake
  • Registratie: Juli 2005
  • Laatst online: 07-03-2024

Snake

Los Angeles, CA, USA

Topicstarter
That's a negative:

Visual Basic .NET:
1
2
3
4
5
6
 Try 
        obj3 = callTarget.Invoke(Me.m_Instance, parameters)
    Catch obj1 As Object When (?)
        Dim exception As TargetInvocationException
        Throw exception.InnerException
    End Try
right from Reflector.

Going for adventure, lots of sun and a convertible! | GMT-8


Acties:
  • 0 Henk 'm!

  • CoolGamer
  • Registratie: Mei 2005
  • Laatst online: 06-09 16:59

CoolGamer

What is it? Dragons?

Want?
Visual Basic .NET:
1
2
Dim exception As TargetInvocationException
Throw exception.InnerException 

Ziet er niet bepaald uit als geldige code, dus het lijkt mij ook pseudo-code.

¸.·´¯`·.¸.·´¯`·.¸><(((º>¸.·´¯`·.¸><(((º>¸.·´¯`·.¸.·´¯`·.¸.·´¯`·.¸<º)))><¸.·´¯`·.¸.·´¯`·.¸.·´¯`·.¸


Acties:
  • 0 Henk 'm!

  • RayNbow
  • Registratie: Maart 2003
  • Laatst online: 06:59

RayNbow

Kirika <3

TheCoolGamer schreef op vrijdag 19 februari 2010 @ 12:39:
Visual Basic .NET:
1
2
Dim exception As TargetInvocationException
Throw exception.InnerException 

Ziet er niet bepaald uit als geldige code, dus het lijkt mij ook pseudo-code.
Da's geldige VB code.
Snake schreef op vrijdag 19 februari 2010 @ 12:29:
That's a negative:

Visual Basic .NET:
1
2
3
4
5
6
 Try 
        obj3 = callTarget.Invoke(Me.m_Instance, parameters)
    Catch obj1 As Object When (?)
        Dim exception As TargetInvocationException
        Throw exception.InnerException
    End Try
right from Reflector.
Ik heb deze code gecompileerd:
Visual Basic .NET:
1
2
3
4
5
6
7
    Sub Main()
        Try
            Throw New Exception("oh noes")
        Catch ex As Exception When ex.Message = "oh noes"
            MsgBox("aaah")
        End Try
    End Sub

En toen gedisassembleerd:
Visual Basic .NET:
1
2
3
4
5
6
7
8
9
<STAThread> _
Public Shared Sub Main()
    Try 
        Throw New Exception("oh noes")
    Catch obj1 As Object When (?)
        Interaction.MsgBox("aaah", MsgBoxStyle.OkOnly, Nothing)
        ProjectData.ClearProjectError
    End Try
End Sub

Het ziet er gewoon naar uit dat Reflector catch/when niet volledig kan disassembleren.

Ipsa Scientia Potestas Est
NNID: ShinNoNoir


Acties:
  • 0 Henk 'm!

  • CoolGamer
  • Registratie: Mei 2005
  • Laatst online: 06-09 16:59

CoolGamer

What is it? Dragons?

Het compileerd, maar het werkt niet (geeft altijd een NullReferenceException). Het lijkt me sterk dat de oorspronkelijke code zoiets bevatte.

¸.·´¯`·.¸.·´¯`·.¸><(((º>¸.·´¯`·.¸><(((º>¸.·´¯`·.¸.·´¯`·.¸.·´¯`·.¸<º)))><¸.·´¯`·.¸.·´¯`·.¸.·´¯`·.¸


Acties:
  • 0 Henk 'm!

  • Snake
  • Registratie: Juli 2005
  • Laatst online: 07-03-2024

Snake

Los Angeles, CA, USA

Topicstarter
Ah interessant inzicht. Dat ik daar niet aan heb gedacht. Eens in de IL duiken, misschien dat we daar wat uit verstaan.

Going for adventure, lots of sun and a convertible! | GMT-8

Pagina: 1