Seite 1 von 1

Verschachtelte Interfaces

Verfasst: 20.03.2013 15:10
von Josh
Ich hätte gern verschachtelte Interfaces analog zu den Strukturen, ungefähr so:

Code: Alles auswählen

Interface ITEST1
  a()
  b()
  c()
EndInterface

Interface ITEST2
  d()
  e()
  f()
  Test1.ITEST1
EndInterface

Define Test.ITEST2

Debug Test\Test1\a()
Hat vielleicht jemand einen Trick auf Lager, wie man das simulieren könnte? Verwendung von Strukturen, Prototypes, Macros oder so.

Thxs
Josh

Re: Verschachtelte Interfaces

Verfasst: 20.03.2013 15:58
von helpy
Hi,

Die Syntax von Interface erlaubt ausschließlich Methoden als Elemente von Interface:
PureBasic Hilfe von [url=http://www.purebasic.com/german/documentation/reference/interfaces.html]Interface[/url] hat geschrieben: Interface <Name> [Extends <Name>]
<Methode[.<Typ>]()>
...
EndInterface
Die einzige Möglichkeit ist die, dass eine Methode ein Interface zurückgibt:

Code: Alles auswählen

EnableExplicit

Interface ITEST1
	a()
	b()
	c()
EndInterface

Interface ITEST2
	d()
	e()
	f()
	GetObjectTest1()
EndInterface

Define oTest2.ITEST2
Define oTest1.ITEST1

oTest1 = oTest2\GetObjectTest1()
oTest1\a()

Re: Verschachtelte Interfaces

Verfasst: 20.03.2013 16:44
von NicTheQuick
Wenn es nur um das Verschachteln geht, dann kann man das rein mit Structures und Prototypes lösen:

Code: Alles auswählen

Prototype.i Zero()
Prototype.i One(a.i)

Structure mySubClass_new
	a.Zero
	b.One
EndStructure

Structure myClass_new
	a.Zero
	b.One
	d.mySubClass_new
EndStructure

Procedure.i Function_Zero()
	ProcedureReturn 5
EndProcedure
Procedure.i Function_One(a.i)
	ProcedureReturn -2 * a
EndProcedure

Procedure.i Function_Zero_Sub()
	ProcedureReturn 10
EndProcedure
Procedure.i Function_One_Sub(a.i)
	ProcedureReturn a
EndProcedure
	

Procedure myClass_new()
	Protected *this.myClass_new = AllocateMemory(SizeOf(myClass_new))
	
	If (Not *this)
		ProcedureReturn 0
	EndIf
	
	With *this
		\a = @Function_Zero()
		\b = @Function_One()
		\d\a = @Function_Zero_Sub()
		\d\b = @Function_One_Sub()
	EndWith
	
	ProcedureReturn *this
EndProcedure

Define *object.myClass_new = myClass_new()

Debug *object\a()
Debug *object\b(1)
Debug *object\d\a()
Debug *object\d\b(1)
Wie man sieht, ist das dann allerdings etwas komplizierter.

Re: Verschachtelte Interfaces

Verfasst: 20.03.2013 17:15
von Chimorin
Ich habe vorher noch nie von Interfaces gehört, scheinen aber sehr wichtig zu sein :lol:

Ich werfe mal meinen Hut mit in den Ring... Beim Beispiel klappt das ;)

Code: Alles auswählen

Interface ITEST1
  a()
  b()
  c()
EndInterface

Interface ITEST2 Extends ITEST1
  d()
  e()
  f()
EndInterface

Define Test.ITEST2

Debug Test\a()

Re: Verschachtelte Interfaces

Verfasst: 20.03.2013 17:22
von ts-soft
Bananenfreak hat geschrieben:Ich werfe mal meinen Hut mit in den Ring... Beim Beispiel klappt das ;)
Dein Beispiel entspricht:

Code: Alles auswählen

Interface ITEST2
  a()
  b()
  c()
  d()
  e()
  f()
EndInterface

Define Test.ITEST2

Debug Test\a() 
und das ist nicht das gesuchte :wink:

Re: Verschachtelte Interfaces

Verfasst: 20.03.2013 17:23
von Josh
Bananenfreak hat geschrieben:Ich werfe mal meinen Hut mit in den Ring... Beim Beispiel klappt das ;)
Ja, aber eben ohne das Subinterface ^^
NicTheQuick hat geschrieben:Wie man sieht, ist das dann allerdings etwas komplizierter.
Cool, danke. Genau das habe ich gesucht. Besonders wichtig war mir auch, dass die Kommandozeilenhilfe funktioniert.
Ich habe zwar mit Strukturen und Prototypes herumgebastelt, aber nichts zusammengebracht :oops: