我知道如何通过反射创建一些对象并传递一些参数。
Dim assembly As System.Reflection.Assembly
Dim control As Object
assembly = System.Reflection.Assembly.Load("WpfControlLibrary1")
control = assembly.CreateInstance("WpfControlLibrary1.Main")
control.Maximize("true")
我的问题是,是否有一种方法可以从"控件"获取信息到"控件的所有者"。
所以我猜应该有一些方法在所有者和创建的程序集之间进行双向交互。
例如,在一些定时器中,我想定期获得"控制"的状态。
foreach(...)
{
var state = control.GetState(); // ????? Is it possible ?
Sleep(10000);
}
这里我们可以看到如何传递参数
所以我需要的是返回一些返回的对象
提前感谢兄弟姐妹在编程方面给我的任何有用的提示!
要调用在另一个程序集中的类上定义的方法,您需要这样做:
Assembly assembly = Assembly.Load("OtherAssembly");
Type controlType = assembly.GetType("OtherAssembly.OtherAssemblyClass");
object control = Activator.CreateInstance(controlType);
controlType.InvokeMember("SetFullName", BindingFlags.InvokeMethod, null,
control, new object[] { "FirstName", "LastNameski" });
这将在对象control
上调用程序集OtherAssembly
的类OtherAssemblyClass
的方法SetFullName
,使用参数"FirstName"
和"LastNameski"
object result = controlType.InvokeMember("GetFullName",
BindingFlags.InvokeMethod, null, control, null);
这将在同一个对象上调用一个名为GetFullName
的方法,该方法不接受参数(因此调用中最后一个null
),并返回一个字符串。
Console.WriteLine(result.GetType().FullName);
这会打印出"System.String"
Console.WriteLine(result);
这将打印出"FirstName LastNameski"
。
在示例中,另一个程序集包含这个类:
namespace OtherAssembly
{
public class OtherAssemblyClass
{
private string firstName;
private string lastName;
public string GetFullName()
{
return firstName + " " + lastName;
}
public void SetFullName(string first, string last)
{
firstName = first;
lastName = last;
}
}
}