0

呼び出すように構成可能なメソッド名をどのように使用できるかについて質問があります。例えば

1.次のような3つの要素を含むxmlファイルがあります。

<?xml version="1.0" encoding="iso-8859-1"?>
<root>
    <element attribute1="a" attribute2="b" attribute3="Send" />
</root>

2.リスト(3つの要素でクラスを作成し、そのクラスのオブジェクトタイプリストを作成)を使用して、xmlファイルから要素を保存しています。

3.次に、Forステートメントを使用します:For Each element As ClassList In GetListでは、代わりにxmlファイルから構成可能なメソッドを呼び出します:

理論的には、SendWaitの代わりに、attribute3の値(値はSendWait)を呼び出す必要があります。

SendKeys.SendWait( "{ENTER}")の代わりに次のようになります。

SendKeys.element.Thirdelement()("{ENTER}")
  • element.Thirdelement()の値はSendWaitです

attribute3には2つの値があります:SendまたはSendwait ifステートメントを使用する必要がありますか、それとも利用可能な解決策はありますか?

If element.ThirdElement() = "SendWait" Then
                                SendKeys.SendWait("{ENTER}")
                            Else
                                SendKeys.Send("{ENTER}")

私はプログラミングが初めてなので、上記のステートメントの1つが異常である場合は、すみません。

LE:3つのメンバーとプロパティを持つ新しいクラスListClass1があります。

firstElement()
secondElement()
thirdElement()

xmlファイルのデータを保存するためにこのクラスを使用しています

<?xml version="1.0" encoding="iso-8859-1"?>
<root>
<element attribute1="a" attribute2="b" attribute3="Send" />
</root>

したがって、リストに値を追加した後、たとえば: element.ThirdElement()はattribute3( "Send")からの値を持ちます。また、 element.secondElement()は、attribute2などの値を保持します。

4

1 に答える 1

0

リフレクションを使用してタスクを実行できます。まず、メソッドを保持するクラスを定義します。

Public Class MethodsToExecute
    Public Sub Send(par1)
       SendKeys.Send("{ENTER}") 
    End Sub
    Public Sub SendWait(par1)
       SendKeys.SendWait("{ENTER}")
    End Sub
End Class

次に、処理するサブを作成します。

Public Shared Sub ExecuteMethodByName(ObjectToInvoke As Object, MethodName As String, ParamArray Parameters() As Object) 
     Dim m As Reflection.MethodInfo = ObjectToInvoke.GetType.GetMethod(MethodName)
     m.Invoke(ObjectToInvoke, Parameters)
End Sub

そして今実行

dim mte as new MethodsToExecute

完全なxmlファイルを繰り返して実行します

 ExecuteMethodByName(mte,element.ThirdElement(), element.firsElement(),element.secondElement())

問題は、ソリューションが名前ではなく属性の順序に依存していることですが、より広範なリフレクションの使用法でそれを処理することもできます。 ParamArrayの例

分かりますか?

于 2012-04-11T15:06:47.850 に答える