Autor |
Beitrag |
Meflin
Hält's aus hier
Beiträge: 5
|
Verfasst: Mi 10.09.08 22:56
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:
Delphi-Prism-Quelltext 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?
|
|
Christian S.
Beiträge: 20451
Erhaltene Danke: 2264
Win 10
C# (VS 2019)
|
Verfasst: Mi 10.09.08 23:04
Hallo und !
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
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
_________________ Zwei Worte werden Dir im Leben viele Türen öffnen - "ziehen" und "drücken".
|
|
Meflin
Hält's aus hier
Beiträge: 5
|
Verfasst: Mi 10.09.08 23:15
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 |
Hm ja missverständlich ausgedrückt
Beispiel:
Delphi-Prism-Quelltext 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 )
|
|
Christian S.
Beiträge: 20451
Erhaltene Danke: 2264
Win 10
C# (VS 2019)
|
Verfasst: Mi 10.09.08 23:19
Hm. Das ist komisch. Folgendes tut's bei mir:
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.
_________________ Zwei Worte werden Dir im Leben viele Türen öffnen - "ziehen" und "drücken".
|
|
Meflin
Hält's aus hier
Beiträge: 5
|
Verfasst: Mi 10.09.08 23:53
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 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 Denn was ändert die property an der Anzahl der generischen Parameter?!
|
|
Christian S.
Beiträge: 20451
Erhaltene Danke: 2264
Win 10
C# (VS 2019)
|
Verfasst: Mi 10.09.08 23:55
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?
_________________ Zwei Worte werden Dir im Leben viele Türen öffnen - "ziehen" und "drücken".
|
|
Meflin
Hält's aus hier
Beiträge: 5
|
Verfasst: Do 11.09.08 20:34
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
|
|
Christian S.
Beiträge: 20451
Erhaltene Danke: 2264
Win 10
C# (VS 2019)
|
Verfasst: Do 11.09.08 20:41
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 )
Meflin hat folgendes geschrieben: | Das wär ja super, wenn gleich mein allererstes Oxy-Projekt nen Compiler-Bug offenbaren würde |
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.
_________________ Zwei Worte werden Dir im Leben viele Türen öffnen - "ziehen" und "drücken".
|
|
Meflin
Hält's aus hier
Beiträge: 5
|
Verfasst: Do 11.09.08 22:58
Also PEVerify meldet in beiden Fällen keinen Fehler.
|
|
Christian S.
Beiträge: 20451
Erhaltene Danke: 2264
Win 10
C# (VS 2019)
|
Verfasst: Fr 12.09.08 00:53
Kannst Du mir das Assemnbly mal als Sourcecode zukommen lassen? Zur Not auch als PN?
_________________ Zwei Worte werden Dir im Leben viele Türen öffnen - "ziehen" und "drücken".
|
|