2012-09-24 15 views
5

Bir elemanın bir VB komut dosyasında hangi özellikleri olduğunu nasıl görebilirim? Örnek: VBScript API'sı olan bir araç kullanıyorum.VB elemanının özelliklerini bul

Dim list : Set list = CreateObject("Scripting.Dictionary") 
' ... Fill List ... 
WriteListElements list 
... 

Sub WriteListElements (list) 
    Dim e, le 
    For Each e In list 
     Set le = list(e)     ' what properties does le have? 
     le.name_of_user_defined_attribut ' I want to access a property but dont know the exact name 
    Next 
End Sub 

Bu API’da, bu Araç’dan (kullanıcı tanımlı) öznitelikleri okuyabilirim. Ancak betiği çalıştırırken, o kullanıcı tanımlı özniteliğin adını bilmediğini söyleyen bir hata alıyorum. Ama bunu araçta kullanırım. Şimdi, kullanıcı tanımlı özelliklerin özel olarak adlandırılıp adlandırılmadığını görmek için yukarıdaki dizide hangi özniteliklerin kullanılabilir olduğunu bilmek istiyorum.

+0

Eğer yansıması gibi ama düz eski VBscript için bir şey mi arıyorsunuz? Evet ise, korkarım ki bu mümkün değil. Belki de tam olarak neden bunu yapmak istediğinizi açıklarsanız alternatif bir yol bulmanıza yardımcı oluruz: 'list' nesnesinin WriteListElements() yöntemine yapılan çağrılar arasında asla aynı türde olmayacağı ve bu nedenle yazın? – mbarthelemy

+0

Soruyu güncelledim. –

+0

PowerShell'iniz varsa, oradaki nesnenin bir örneğini oluşturabilir ve üyelerini almak için 'gm' kullanabilirsiniz: http://stackoverflow.com/questions/668321/how-to-use-powershell-get-member- cmdlet – bytebuster

cevap

2

Gerçekten mümkün değil. VBScript çalışma zamanında yalnızca çok basit bir tür bilgisi bulunur. İdeal olarak, aracınızın nesnelerini standart Sözlük nesnelerine çeviren ve Anahtarları yineleyen bir bağdaştırıcı oluşturabilirsiniz. Bu mümkün değilse, yapabileceğiniz en iyi şey, üyelerini çağırmadan önce her nesnenin tip adını kontrol etmektir. Örnek:

<html> 
<body> 

<script type="text/vbscript"> 

    Class Human 
     Private m_name 

     Public Property Get Name 
      Name = m_name 
     End Property 

     Public Property Let Name(newName) 
      m_name = newName 
     End Property 
    End Class 

    Dim joe 
    Set joe = new Human 
    joe.Name = "Joe Coder" 

    Dim list 
    Set list = CreateObject("Scripting.Dictionary") 
    list.Add "a", 5 
    list.Add "b", joe 
    list.Add "c", "apples" 

    WriteListElements list 

    Sub WriteListElements (list) 
     Dim e 
     For Each e In list 
      If (TypeName(list.Item(e)) = "Human") Then 
       document.write("We have found a Human: " &_ 
        "<b>" & list.Item(e).Name & "</b>") 
      End If 
     Next 
    End Sub 

</script> 

</body> 
</html> 
1
Dim list : Set list = CreateObject("Scripting.Dictionary") 
' ... Fill List ... 
WriteListElements list 
... 

Sub WriteListElements (list) 
    Dim e, le  
    For Each e In list 
     Set le = e.Items     
     Response.Write le(name_of_user_defined_attribut) 
    Next 
End Sub 
0

Bu kolaydır - sahte yansıma kullanın:

class Developer 

     Public reflection 
    '============================= 
    'Private properties 
     private mId 

     private mFirstName 
     private mLastName 

     private sub Class_Initialize() 
     reflection = Array("Id","FirstName","LastName") 
     end sub 

     private sub Class_Terminate() 
     end sub 

    '============================= 
    'public properties 

     public property get Id() 
      Id = mId 
     end property 

     public property let Id(val) 
      mId = val 
     end property 


     public property get FirstName() 
      FirstName = mFirstName 
     end property 

     public property let FirstName(val) 
      mFirstName = val 
     end property 

     public property get LastName() 
      LastName = mLastName 
     end property 

     public property let LastName(val) 
      mLastName = val 
     end property 

    end class 


    For each property in obj.reflection 
    document.write(property) 
    document.write(Eval ("obj." & property)) 
    Next