[CSharp.net] AW:Reflection über Interface

Mansur Esmann [OM] csharp.net at glengamoi.com
Mon, 29 Mar 2004 13:48:16 +0200


Genau .... das wollte ich gerade noch schreiben:

IFrame nform = form as IFrame;
nform.Save();

Das geht ....

Im Memberinfo steht es aber scheibar net:
MethodInfo mi = t.GetMethod("Save");
			if(mi != null)
				mi.Invoke(nform, null);

Das Interface schaut folgendermaßen aus:

	public interface IFrame
	{
		frmMain Parent
		{
			get;
			set;
		}
		string HelpFile
		{
			get;
		}

		string FrameTitle
		{
			get;
		}

		string[] Action
		{
			get;
			set;
		}

		void Save();

	}

Ein Public kann ich gar nicht angeben .... "public ist für dieses Element nicht gültig"

Im Childframe schreibe ich dann folgendes (Das hatte ich aber schon gepostet):
void IFrame.Save()
		{
			MessageBox.Show("speichern");
		}



> Das kann nicht sein.
> wenn deine form Variable von einem Typen abgeleitet ist der IFrame
> implementiert, dann muß folgender Code reichen:
>
> IFrame frame = form as IFrame;
> if(frame!=null)
> 	frame.Save();
>
> Einziger Grund wo das mit Reflection nicht hinhauen könnte: Save is private
> und du hast keine passenden BindingFlags mitgegeben fürs Invoke.
>
> lG
> Peter
>
> > -----Original Message-----
> > From: csharp.net-admin@glengamoi.com
> > [mailto:csharp.net-admin@glengamoi.com] On Behalf Of Mansur
> > Esmann [OM]
> > Sent: Monday, March 29, 2004 1:35 PM
> > To: csharp.net@glengamoi.com
> > Subject: [CSharp.net] AW: [CSharp.net] RE: [CSharp.net]
> > Reflection über Interface
> >
> > Dank!
> > aber irgendwie will es nicht so richtig klappen ....
> >
> > 		private void toolBar1_ButtonClick(...)
> > 		{
> > 			IFrame nform = form as IFrame;
> >
> > 			Type t = nform.GetType();
> >
> > 			MethodInfo mi = t.GetMethod("Save");
> > 			if(mi != null)
> > 				mi.Invoke(nform, null);
> > 		}
> >
> > IFrame ist mein Interface ...
> > Ich bekomme aber nicht das Interface, sondern das Objekt
> > dahinter ..... das Childform.
> > Eine Methode Save finde ich dann auch nicht, obwohl die ja im
> > Interface drinnen ist.
> >
> > Liege ich da jetzt irgendwie völlig daneben?
> >
> > Gruß Mansur
> >
> >
> > >
> > > Hallo,
> > > Das hier sollte helfen:
> > >
> > > object o;
> > > //o, beinhaltet das objekt, dass das interface supported
> > >
> > > //ermittle die gesuchte Methode eines Objekts Type t = o.GetType();
> > >
> > > MethodInfo mi = t.GetMethod("MeineMethode");
> > > if(mi!=null)
> > > 	mi.Invoke(o,null)
> > >
> > > alternativ, wenn das Interface und die Methode bekannt ist:
> > >
> > > MyInterface myInt = o as MyInterface;
> > > if(myInt != null)
> > > 	myInt.MyMethod();
> > >
> > > lG
> > > Peter
> > >
> > > > -----Original Message-----
> > > > From: csharp.net-admin@glengamoi.com
> > > > [mailto:csharp.net-admin@glengamoi.com] On Behalf Of
> > Mansur Esmann
> > > > [OM]
> > > > Sent: Monday, March 29, 2004 9:41 AM
> > > > To: csharp.net@glengamoi.com
> > > > Subject: [CSharp.net] Reflection über Interface
> > > >
> > > > Hallo,
> > > >
> > > > ich habe in einem Interface eine Methode:
> > > > public interface IFrame{
> > > > 	void Save();
> > > > }
> > > >
> > > > In einem Childformular implementiere ich die Methode:
> > > > void IFrame.Save()
> > > > {
> > > > 	MessageBox.Show("speichern....");
> > > > }
> > > >
> > > >
> > > > Jetzt will ich über reflection:
> > > > a.) Rausfinden welche Methoden zur Verfügung stehen
> > > > b.) Falls gefunden die Methode ausführen
> > > >
> > > > Also a.) War kein Problem ....
> > > > Aber b.) das kriege ich nicht hin ....
> > > >
> > > > InvokeMethode .... damit meine ich kann man das machen ....
> > > > Ein googeln hat mir aber kein verständliches Beispiel
> > gebracht, wo
> > > > das mit einem Interface gemacht wird ....
> > > >
> > > > Hat da jemand ein Beispiel und ggf. ein paar Zeilen
> > Erläuterung dazu?
> > > >
> > > > Gruß Mansur
> > > >
> > > > _______________________________________________
> > > > CSharp.net Mailingliste, Postings senden an:
> > > > CSharp.net@glengamoi.com
> > > > An-/Abmeldung und Suchfunktion unter:
> > > > http://www.glengamoi.com/mailman/listinfo/csharp.net
> > > >
> > >
> > > _______________________________________________
> > > CSharp.net Mailingliste, Postings senden an:
> > > CSharp.net@glengamoi.com
> > > An-/Abmeldung und Suchfunktion unter:
> > > http://www.glengamoi.com/mailman/listinfo/csharp.net
> >
> > _______________________________________________
> > CSharp.net Mailingliste, Postings senden an:
> > CSharp.net@glengamoi.com
> > An-/Abmeldung und Suchfunktion unter:
> > http://www.glengamoi.com/mailman/listinfo/csharp.net
> >
>
> _______________________________________________
> CSharp.net Mailingliste, Postings senden an:
> CSharp.net@glengamoi.com
> An-/Abmeldung und Suchfunktion unter:
> http://www.glengamoi.com/mailman/listinfo/csharp.net