2012-09-24 4 views
5

VB 스크립트에서 요소의 속성을 어떻게 볼 수 있습니까? 예 :VB 요소의 속성 가져 오기

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 

VBScript API가있는 도구를 사용합니다. 해당 API에서 해당 도구의 특성을 읽을 수 있습니다 (사용자 정의). 그러나 스크립트를 실행하는 동안 사용자 정의 속성의 이름을 알 수 없다는 오류가 나타납니다. 하지만 도구에서 사용합니다. 이제 사용자 정의 속성의 이름이 구체적으로 지정되었는지 확인하기 위해 위의 배열에서 어떤 속성을 사용할 수 있는지 알고 싶습니다.

+0

당신이 반사 좋아하지만 평범한 구식 VBScript를 위해 뭔가를 찾고 계십니까을? 그렇다면 가능하지 않습니다. 어쩌면 우리가 원하는 이유를 정확히 설명하면 대체 방법을 찾을 수 있습니다. 즉, '목록'개체가 WriteListElements() 메서드 호출 사이에 같은 유형을 가지지 않으므로 해당 목록 개체를 알 수 없습니다. 유형? – mbarthelemy

+0

질문이 업데이트되었습니다. –

+0

PowerShell을 가지고 있다면, 그곳에서 객체의 인스턴스를 생성 한 다음'gm'을 사용하여 그 멤버를 얻을 수 있습니다 : http://stackoverflow.com/questions/668321/how-to-use-powershell-get-member- cmdlet – bytebuster

답변

2

정말 가능하지 않습니다. 매우 기본적인 형식 정보 만 VBScript 런타임에서 사용할 수 있습니다. 이상적으로는 도구의 오브젝트를 표준 사전 오브젝트로 변환하고 키를 반복하는 어댑터를 작성할 수 있습니다. 그렇게 할 수 없다면 멤버를 호출하기 전에 각 객체의 유형 이름을 확인하는 것이 가장 좋습니다. 예 :

<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

그것은 간단합니다 - 의사 반사 사용

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