konstante objekte?
Übersicht

FredFeuersteinBetreff: konstante objekte? |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
folgendes problem: ich würde gerne ein konstantes objekt anlegen.
die klasse von der ich gerne ein konstantes objekt anlegen möchte sieht in etwa folgendermaßen aus Type RGB ... 'PUBLIC Function createRGB:RGB(r:Int, g:Int, b:Int) Local rgb:RGB = New RGB rgb.init(r, g, b) Return rgb EndFunction ... EndType und nun die klasse in der ich gerne ein kostantes objekt von RGB anlegen möchte Type Color und nun das konstante objekt und mein problem Const COLOR_WHITE:RGB = RGB.createRGB(255, 255, 255) ... EndType der compiler meint immer das ich ein konstantes objekt benötige um eine konstante anzulegen (muhaha, wenn ich eins hätte, müßt ich keins anlegen ![]() habe mich mit der zeit ja schon damit abgefunden das so einiges anders ist als bei anderen objektorientierten programmiersprachen bzw. gar nicht erst geht, aber das jetzt auch noch ![]() deswegen nun meine frage: mach ich hier irgend etwas extrem falsch, hab ich einen denkfehler, oder geht das wirklich nicht und wenn nein, kann mir eventuell jemand eine alternative nennen? mir fällt nämlich leider keine saubere ein ![]() |
||
![]() |
ChaosCoder |
![]() Antworten mit Zitat ![]() |
---|---|---|
Du machst etwas falsch. Eine Funktion ist nie konstant.
Code: [AUSKLAPPEN] Const COLOR_WHITE:RGB = RGB.createRGB(255, 255, 255) Ist also demnach falsch.
Allerdings weiß ich keine andere Lösung in dieser Hinsicht... Ich denke aber auch dass es da keine alternativ Lösung geben wird, wie man n konstantes Objekt erzeugt... (Ich glaube zu wissen dass es in anderen Programmiersprachen konstante Funktionen gibt, bin mir da aber auch nich grad so sicher, außerdem würde dir das ja eh nix bringen ![]() Also heißts wohl: "Probier's anders ![]() |
||
Projekte: Geolaria | aNemy
Webseite: chaosspace.de |
![]() |
Casiopaya |
![]() Antworten mit Zitat ![]() |
---|---|---|
Morgen,
das was du möchtest ist technisch unmöglich. ![]() Code: [AUSKLAPPEN] Const b=255
werden alle Vorkommen von "b" durch "255" ersetzt, die obere Zeile Code wird gar nicht beim Kompilieren beachtet. Ein "konstantes Objekt" wäre demnach irgendein Speicherbereich mit fester Adresse und festem Inhalt. -> Das gibts in keiner Sprache, spricht gegen alles wofür die OO steht. Deshalb kannst du auch keine "konstanten" Objekte anlegen. @ChaosCoder: Du meinst vermutlich statische Methoden. Das ist was anderes. Diese Methoden sind lediglich nicht an an konkretes Objekt gebunden (d.h. werden nach dem Instantiieren des Objekts bereitgestellt), sondern werden "statisch" von der Klasse angeboten. Grüße |
||
![]() |
ChaosCoder |
![]() Antworten mit Zitat ![]() |
---|---|---|
Hmmm mein ich? Ach weiß ich doch nich, naja schön dass das jetzt geklärt ist ![]() |
||
Projekte: Geolaria | aNemy
Webseite: chaosspace.de |
FredFeuerstein |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
erst mal danke für eure mithilfe!
glaube hab mich falsch ausgedrückt. wenn ich jetzt z.b. java benutzen würde, würde ich so was schreiben: Code: [AUSKLAPPEN] public class RGB { ... public RGB(int r, int g, int b) { ... } ... } public class Color { public static final RGB COLOR_WHITE = new RGB(255, 255, 255); ... } und das würde ich jetzt auch gerne unter BlitzMax machen. ich möchte kein konstantes objekt an sich, sondern ein konstanten "zeiger" bzw. eine konstante "referenz" auf ein objekt. sprich, ich will das ich, in dem obigen beispiel, COLOR_WHITE nicht auf ein anderes objekt umbiegen kann, also z.b. später im code nicht sagen kann COLOR_WHITE = New ... . das Objekt, auf welches COLOR_WHITE verweist, kann so nicht "konstant" sein, das ist klar. dies kann man ja aber darüber erreichen das man keine set-funktionen zur verfügung stellt welche das objekt verändern können. was ja hier leider auch nicht 100% geht, weil man ja nichts private machen kann, oder etwa doch und ich weiß mal wieder nur nicht wie? wenn ja könnte mich mal bitte jemand aufklären *anfleh*? |
||
Dreamora |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Definier sie einfach als global in nem Type, das ist gleichbedeutend mit Static fields in JAVA / C++
Musst halt nur dran denken dass du net dran rummurksen kannst. Const kann nicht mit Dingen genutzt werden in BM die garnicht Const sind. Java kann das in erster linie weils nie endkompiliert wird. Sprich es kann auch pseudo konstanten haben die es dann später zur laufzeit initiert. C/C++ umgeht das mit Macros, das unterstützt BM jedoch nicht sofern du nicht die BMK sources nimmst und es implementierst. |
||
Ihr findet die aktuellen Projekte unter Gayasoft und könnt mich unter @gayasoft auf Twitter erreichen. |
FredFeuerstein |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
@Dreamora
hmmmmm, laß mich mal kurz überlegen von wegen implementieren ...... nö. wenn ich mal zu viel zeit und mehr erfahrung habe, überlege ich mir das vielleicht mal ![]() aber solange mache ich dann doch wohl lieber ein kleines workaround wie du es vorgeschlagen hast und lege anstatt konstanten dann halt einfach global attribute an die ich dann eben behandeln tue als wären es "konstanten". ist zwar nicht unbedingt die sauberste lösung, aber man muß halt mit den mitteln arbeiten die man zur verfügung gestellt bekommt, nicht wahr ![]() trotzdem fettes danke an alle |
||
Dreamora |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
wenn du die globals in einem Type ablegst hast du da eine relativ optimale Lösung ja.
Weill dann kannst du sie mit TypeName.GlobalenVariablenName direkt ansprechen, aber es gibt keine Namenskollisionen, da deswegen GlobalenVariablenName nicht betroffen ist. |
||
Ihr findet die aktuellen Projekte unter Gayasoft und könnt mich unter @gayasoft auf Twitter erreichen. |
![]() |
Casiopaya |
![]() Antworten mit Zitat ![]() |
---|---|---|
Noch ein Anhang:
http://zehr.de/downloads/BlitzMax-OOP.pdf scheint alle OO-Features von BM aufzulisten. Wie man sieht gibt es zwar ein Schlüsselwort "final", allerdings hat das nicht die Bedeutung von "final" unter Java, sondern anscheinend die von "sealed" unter C#. Also, dass man einen Typ/eine Methode nicht ableiten/überschreiben kann. Musst also wohl wirklich ne Globale Variable nehmen und diese halt nie verändern ![]() |
||
Übersicht


Powered by phpBB © 2001 - 2006, phpBB Group