Mit meiner .NET Applikation möchte ich auf eine private Funktion einer anderen, bereits kompilierten .NET Komponente zugreifen. Ist das möglich?
Dieser Beitrag wurde von Legacy bearbeitet: 22. Mai 2005 - 17:08
geschrieben 19. Mai 2005 - 20:28
Dieser Beitrag wurde von Legacy bearbeitet: 22. Mai 2005 - 17:08
geschrieben 19. Mai 2005 - 20:45
geschrieben 19. Mai 2005 - 20:51
geschrieben 20. Mai 2005 - 12:20
//Der Namespace System.Reflection wurde eingebunden!
//Assembly laden
Assembly l_Assembly
= Assembly.LoadFrom(@"..\..\..\ClassLibrary6\bin\Debug\ClassLibrary6.dll");
//Die Klasse, auf die zugegriffen werden soll, ermitteln
Type l_Type = l_Assembly.GetType("ClassLibrary6.Class1");
//Instanz der Klasse erstellen
object l_Instance = Activator.CreateInstance(l_Type);
//MethodInfo-Objekt für die gewünschte Funktion erstellen
//und Funktion in der KlassenInstanz über Invoke aufrufen
MethodInfo l_MethodInfo = l_Type.GetMethod("ShowMessage", BindingFlags.Instance | BindingFlags.NonPublic);
l_MethodInfo.Invoke(l_Instance, new object[]{"Hello Reflection World!"});
geschrieben 20. Mai 2005 - 15:54
geschrieben 20. Mai 2005 - 17:57
//Privaten Constructor ermitteln
ConstructorInfo l_ConstructorInfo = l_Type.GetConstructor(BindingFlags.Instance | BindingFlags.NonPublic, null, new Type[0], null);
object l_Instance = l_ConstructorInfo.Invoke(new object[0]);
//Methode aufrufen
MethodInfo l_MethodInfo = l_Type.GetMethod("ShowMessage2", BindingFlags.Instance | BindingFlags.NonPublic);
l_MethodInfo.Invoke(l_Instance, new object[]{"Hello Reflection World 2!"});
Dieser Beitrag wurde von constructor bearbeitet: 20. Mai 2005 - 18:04
geschrieben 22. Mai 2005 - 17:07
Dieser Beitrag wurde von Legacy bearbeitet: 22. Mai 2005 - 17:40
geschrieben 24. Mai 2005 - 09:41
Zitat (Legacy: 22.05.2005, 18:07)
private static Type FindType()
{
Assembly l_Assembly = Assembly.LoadFrom(@"c:\MeineKomponente.dll");
Type l_AddInInfoType = null;
foreach(Type type in l_Assembly.GetTypes())
{
//Überprüfen, ob der Type das Interface implementiert
TypeFilter myFilter = new TypeFilter(InterfaceFilter);
String[] myInterfaceList = new String[1] {"Namespace.IMeinInterface"};
Type[] myInterfaces = type.FindInterfaces(myFilter, myInterfaceList[0]);
if (myInterfaces.Length == 1)
{
l_AddInInfoType = type;
break;
}
}
return l_AddInInfoType;
}
private static bool InterfaceFilter(Type typeObj, Object criteriaObj)
{
if(typeObj.ToString() == criteriaObj.ToString())
{
return true;
}
else
{
return false;
}
}