Delphi-Forum.de Delphi-Library.de
C-Sharp-Forum.de C-Sharp-Library.de
Registrieren Login Suche Hilfe Sitemap
[Oxygene, 3.0] Verständnisfrage zu Generics
spacer
Autor Nachricht
Meflin
Hält's aus hier

Beiträge: 5
Dabei seit: 10.09.2008



BeitragVerfasst am: Mi 10.09.08 21:56 
Sprache: Oxygene
Version: 3.0
Antworten mit Zitat Beitrag melden
Moin moin!

Ich mache gerade meine ersten Schritte in .Net und das (endlich) mit Chrome/Oxygene :) Es sei mir verziehn falls das eine dumme Frage ist, aber ich habe wirklich noch nicht allzuviel Ahnung von Generics (und von den ganzen anderen tollen Dingern die Oxygene im Vergleich zu Object Pascal beherrscht auch noch nicht... :( )

Prinzipiell hätte ich gerne folgende Struktur:

ausblenden Delphi-Prism-Quelltext markieren
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
FooA<T> = public class
public
Wulu: T;
end;

FooB<T> = public class
public
Blubb: Array of FooA<T>;
constructor(const Count: Integer);
end;

constructor FooB<T>(const Count: Integer);
begin
Blubb := new FooA<T>[Count];
for i: Integer := Low(Blubb) to High(Blubb) do
Blubb[i].Wulu := ...
end;


Ich hoffe es ist einigermaßen verständlich, was ich will. Ich will eine generische Klasse erzeugen, die im Konstruktor wiederum andere generische Klassen vom selben Typ erzeugt. Nur so wie oben dargestellt funktioniert das ganze nicht :( Unterliege ich da einem prinzipiellen Denkfehler?
Private Nachricht sendenPosting in privater Nachricht zitieren
Christian S.
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starhalf offtopic starofftopic star
Chefentwickler

Beiträge: 17076
Dabei seit: 07.07.2002
Wohnort: Server-Souterrain

Win 7
Delphi Prism, C# (VS 2010)
BeitragVerfasst am: Mi 10.09.08 22:04  Antworten mit Zitat Beitrag melden
Hallo und :welcome:!

Das hier verstehe ich nicht so ganz:
Zitat:
Ich will eine generische Klasse erzeugen, die im Konstruktor wiederum andere generische Klassen vom selben Typ erzeugt.

Spontan hätte ich jetzt gedacht, dass soll heißen, dass FooA<T> ein Array mit Elementen FooA<T> enthalten soll :gruebel:

Aber wenn man die Sache mit der Schleife mal rausnimmt (die Wertzuweisung geht ja nur, wenn ich einen Wert vom Typ T habe), kompiliert das zumindest mal :-)

Grüße
Chirstian

_________________
"Physics is a bitch" - William Bell, Fringe
Private Nachricht sendenPosting in privater Nachricht zitieren Webseite dieses Mitglieds besuchen
Meflin
Hält's aus hier

(Threadstarter)

Beiträge: 5
Dabei seit: 10.09.2008



BeitragVerfasst am: Mi 10.09.08 22:15  Antworten mit Zitat Beitrag melden
Christian S. hat folgendes geschrieben:
Spontan hätte ich jetzt gedacht, dass soll heißen, dass FooA<T> ein Array mit Elementen FooA<T> enthalten soll :gruebel:

Hm ja missverständlich ausgedrückt :nut:

Beispiel:
ausblenden Chrome-Quelltext markieren
1:
Blubb := new FooB<integer>(5);

Soll eine Instanz von FooB erzeugen, die wiederum 5 Instanzen von FooA erzeugt, in denen T ebenfalls als Integer gehandhabt wird.

Kompilieren tut das ganze auch, nur sobald ich versuche, mit den FooAs zu arbeiten (also z.B. Werte zuzuweisen), endet das in einer
Zitat:
Der generische Typ ... wurde mit der falschen Anzahl von generischen Argumenten in assembly ... verwendet

Fehlermeldung (die aber das Programm nichtmal zum Absturz bringt sondern nur im Debugger sichtbar wird :gruebel:)
Private Nachricht sendenPosting in privater Nachricht zitieren
Christian S.
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starhalf offtopic starofftopic star
Chefentwickler

Beiträge: 17076
Dabei seit: 07.07.2002
Wohnort: Server-Souterrain

Win 7
Delphi Prism, C# (VS 2010)
BeitragVerfasst am: Mi 10.09.08 22:19  Antworten mit Zitat Beitrag melden
Hm. Das ist komisch. Folgendes tut's bei mir:

ausblenden volle Höhe Chrome-Quelltext markieren
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
37:
38:
39:
40:
41:
42:
43:
44:
namespace ConsoleApplication1;

interface

type
  ConsoleApp = class
  public
    class method Main;
  end;

  FooA<T> = public class
  public
    property Wulu: T;
  end;

  FooB<T> = public class
  public
    property Blubb: Array of FooA<T>;
    constructor(const Count: Integer);
  end;

implementation

class method ConsoleApp.Main;
begin
  var f := new FooB<Integer>(5);

  for i : Integer := low(f.Blubb) to high(f.Blubb) do
    f.Blubb[i].Wulu := i;

  for b in f.Blubb do
    Console.WriteLine(b.Wulu);

  Console.ReadLine;
end;

constructor FooB<T>(const Count: Integer);
begin
  Blubb := new FooA<T>[Count];
  for i : Integer := low(Blubb) to high(Blubb) do
    Blubb[i] := new FooA<T>;
end;

end.


//edit: Ich hab alles, was public ist, als property gemacht, aber das sollte keinen Unterschied machen.

_________________
"Physics is a bitch" - William Bell, Fringe
Private Nachricht sendenPosting in privater Nachricht zitieren Webseite dieses Mitglieds besuchen
Meflin
Hält's aus hier

(Threadstarter)

Beiträge: 5
Dabei seit: 10.09.2008



BeitragVerfasst am: Mi 10.09.08 22:53  Antworten mit Zitat Beitrag melden
Christian S. hat folgendes geschrieben:
//edit: Ich hab alles, was public ist, als property gemacht, aber das sollte keinen Unterschied machen.

Doch, GENAU DAS macht den Unterschied :shock: Ich habe tatsächlich lediglich mein Array zu einer property gemacht, das ganze neu kompiliert, und jetzt läufts :?

Verstehen tu ich das jetzt allerdings nicht :gruebel: Denn was ändert die property an der Anzahl der generischen Parameter?!
Private Nachricht sendenPosting in privater Nachricht zitieren
Christian S.
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starhalf offtopic starofftopic star
Chefentwickler

Beiträge: 17076
Dabei seit: 07.07.2002
Wohnort: Server-Souterrain

Win 7
Delphi Prism, C# (VS 2010)
BeitragVerfasst am: Mi 10.09.08 22:55  Antworten mit Zitat Beitrag melden
Hast Du mal PEVerify über das Assembly laufen lassen? Der Fehler klingt irgendwie fast nach einem Compiler-Bug.

P.S.: Welche Oxy-Version hast Du genau?

_________________
"Physics is a bitch" - William Bell, Fringe
Private Nachricht sendenPosting in privater Nachricht zitieren Webseite dieses Mitglieds besuchen
Meflin
Hält's aus hier

(Threadstarter)

Beiträge: 5
Dabei seit: 10.09.2008



BeitragVerfasst am: Do 11.09.08 19:34  Antworten mit Zitat Beitrag melden
Christian S. hat folgendes geschrieben:
Hast Du mal PEVerify über das Assembly laufen lassen?

Nein, was würde mir das bringen? Wie gesagt, .Net = absolutes Neuland für mich...

Zitat:
P.S.: Welche Oxy-Version hast Du genau?

3.0.13

Das wär ja super, wenn gleich mein allererstes Oxy-Projekt nen Compiler-Bug offenbaren würde :lol:
Private Nachricht sendenPosting in privater Nachricht zitieren
Christian S.
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starhalf offtopic starofftopic star
Chefentwickler

Beiträge: 17076
Dabei seit: 07.07.2002
Wohnort: Server-Souterrain

Win 7
Delphi Prism, C# (VS 2010)
BeitragVerfasst am: Do 11.09.08 19:41  Antworten mit Zitat Beitrag melden
Meflin hat folgendes geschrieben:
Christian S. hat folgendes geschrieben:
Hast Du mal PEVerify über das Assembly laufen lassen?

Nein, was würde mir das bringen? Wie gesagt, .Net = absolutes Neuland für mich...

PEVerify sagt Dir, ob ein Assembly ein gültiges .NET-Assembly ist. Die Fehlermeldung, die Du gepostet hast, hatte ich mal in einer Beta-Version von Oxy, da hat das Assembly auch bei PEVerify nicht bestanden. Wenn es nicht besteht, ist es definitiv ein Bug im Compiler. PEVerify ist Teil des Windows-SDK (bei mir ist Version 6 drauf, ich bin aber nicht sicher, ob's was aktuelleres gibt :gruebel:)

Meflin hat folgendes geschrieben:
Das wär ja super, wenn gleich mein allererstes Oxy-Projekt nen Compiler-Bug offenbaren würde :lol:
Ja ;-) Wenn sich das als Fehler rausstellt, kann ich das gerne als Bugreport in der entsprechenden Newsgroup posten (mit Referenz auf diesen Thread).

Die Version scheint zumindest die Neueste zu sein. Komisch, dass ich den Fehler bei mir nicht sehe.

_________________
"Physics is a bitch" - William Bell, Fringe
Private Nachricht sendenPosting in privater Nachricht zitieren Webseite dieses Mitglieds besuchen
Meflin
Hält's aus hier

(Threadstarter)

Beiträge: 5
Dabei seit: 10.09.2008



BeitragVerfasst am: Do 11.09.08 21:58  Antworten mit Zitat Beitrag melden
Also PEVerify meldet in beiden Fällen keinen Fehler.
Private Nachricht sendenPosting in privater Nachricht zitieren
Christian S.
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starhalf offtopic starofftopic star
Chefentwickler

Beiträge: 17076
Dabei seit: 07.07.2002
Wohnort: Server-Souterrain

Win 7
Delphi Prism, C# (VS 2010)
BeitragVerfasst am: Do 11.09.08 23:53  Antworten mit Zitat Beitrag melden
Kannst Du mir das Assemnbly mal als Sourcecode zukommen lassen? Zur Not auch als PN?

_________________
"Physics is a bitch" - William Bell, Fringe
Private Nachricht sendenPosting in privater Nachricht zitieren Webseite dieses Mitglieds besuchen
Werbung ausblenden? Dann registriere Dich kostenlos. Weitere Gründe für eine Registrierung.


Werbung ausblenden? Dann registriere Dich kostenlos. Weitere Gründe für eine Registrierung.
Beiträge vom vorherigen Thema anzeigen:   
home home