New() Methode mit Parametern?

Übersicht BlitzMax, BlitzMax NG Allgemein

Neue Antwort erstellen

M0rgenstern

Betreff: New() Methode mit Parametern?

BeitragDo, Jul 12, 2012 7:41
Antworten mit Zitat
Benutzer-Profile anzeigen
Hallo Leute,

Gibt es eine Möglichkeit, eine Klasse zu schreiben, deren New() Methode einen Parameter hat?
Ich habe das nämlich ausprobiert und bekomme diesen Fehler: Zitat:
Compile Error: Identifier 'psGivenMessage' not found

Undzwar in folgender Methode:

BlitzMax: [AUSKLAPPEN]
	Method New(psGivenMessage:String)
__SetTimeWhenThrown(CurrentDate() + " __ " + CurrentTime())
__SetGivenMessage(psGivenMessage) 'HIER taucht der Fehler auf.
__SetID(NextID())
__SetOwnMessage("The state of the object forbids to use the method (in this way).")
__SetOwnType("InvalidOperationException")
End Method


Wenn ich einfach mal den Parameter innerhalb der Methode auskommentiere (nicht im Kopf der Methode) dann bekomme ich, wenn ich den Konstruktor aufrufe, folgende Fehlermeldung: Zitat:
Compile Error: Illegal subexpression for object cast
undzwar in folgender Zeile:
BlitzMax: [AUSKLAPPEN]
Throw New("In 'TQueue.(m)Dequeue()' the queue " + ToString() + " has no elements.") TInvalidOperationException

Wobei er das TInvalidOperationException markiert.

Ich gehe also einfach mal stark davon aus, dass es nicht geht. Wollte aber nochmal nachfragen, bevor ich das alles umschreibe und durch Create ersetze.

Lg, M0rgenstern

BladeRunner

Moderator

BeitragDo, Jul 12, 2012 9:49
Antworten mit Zitat
Benutzer-Profile anzeigen
Jop, da BMax keine Funktionsüberladung unterstützt und die new()-Methode ja schon definiert ist bleibt dir leider nix anderes übrig als auf eine Create-Funktion zurückzugreifen.
Zu Diensten, Bürger.
Intel T2300, 2.5GB DDR 533, Mobility Radeon X1600 Win XP Home SP3
Intel T8400, 4GB DDR3, Nvidia GF9700M GTS Win 7/64
B3D BMax MaxGUI

Stolzer Gewinner des BAC#48, #52 & #92
 

jsp

BeitragDo, Jul 12, 2012 13:03
Antworten mit Zitat
Benutzer-Profile anzeigen
Du könntest natürlich auch deine New Methode umbenennen z.B.
Method MyNew(psGivenMessage:String)

und dann mit:

Local Wasntyp:MeinTyp = New MeinTyp.MyNew( "blabla" ) aufrufen und fertig.
Logic Gui Professional a Gui Designer for MaxGui

ToeB

BeitragDo, Jul 12, 2012 13:20
Antworten mit Zitat
Benutzer-Profile anzeigen
Wobei man glaub ich Klammern um das New Element setzten muss, damit man auf die Methode zurückgreifen kann Wink

BlitzMax: [AUSKLAPPEN]
Local Wasntyp:MeinTyp = (New MeinTyp).MyNew( "blabla" )


Lg, Tobias
Religiöse Kriege sind Streitigkeiten erwachsener Männer darum, wer den besten imaginären Freund hat.
Race-Project - Das Rennspiel der etwas anderen Art
SimpleUDP3.0 - Neuste Version der Netzwerk-Bibliothek
Vielen Dank an dieser Stelle nochmal an Pummelie, welcher mir einen Teil seines VServers für das Betreiben meines Masterservers zur verfügung stellt!

DaysShadow

BeitragDo, Jul 12, 2012 13:56
Antworten mit Zitat
Benutzer-Profile anzeigen
Nein, muss man nicht.

Ich verwende schon lange
BlitzMax: [AUSKLAPPEN]
MyType myvar = New MyType.Init( "FunnyName" )


und das geht einwandfrei.

Das New hat halt einfach eine höhere Priorität und wird vorher ausgewertet, daher kein Problem.
Blessed is the mind too small for doubt

M0rgenstern

BeitragDo, Jul 12, 2012 14:42
Antworten mit Zitat
Benutzer-Profile anzeigen
Hey.
Vielen Dank für die Antworten.

Ich muss ehrlich sagen, dass ich nicht wirklich nen Unterschied zwischen einem normalen Konstruktor und einem
BlitzMax: [AUSKLAPPEN]
New TMyType.MyNew(Param)
sehe. Aber es sieht irgendwie schicker aus.
Trotzdem muss MyNew Das Object selbst zurückgeben, als so aussehen:

BlitzMax: [AUSKLAPPEN]
Method MyNew:TMyType(param:Object)

'Mache was mit dem Parameter

Return Self
End Method


Denn sonst beschwert sich der compiler folgendermaßen:
Zitat:
Compile Error: Unable to convert from 'Int' to 'TInvalidOperationException'

Bei:
BlitzMax: [AUSKLAPPEN]
Local ex:TInvalidOperationException = New TInvalidOperationException.MyNew("In 'TQueue.(m)Dequeue()' the queue " + ToString() + " has no elements.")


Oder habe ich einfach nur was falsch gemacht? Denn bei mir passiert das.

Lg, M0rgenstern

Lobby

BeitragDo, Jul 12, 2012 15:03
Antworten mit Zitat
Benutzer-Profile anzeigen
Nein, du hast es genau so gemacht, wie man es machen muss, wenn man es so machen will. Viel Spaß damit, denn nützlich ist es auf jeden Fall Wink .
TheoTown - Eine Stadtaufbausimulation für Android, iOS, Windows, Mac OS und Linux

M0rgenstern

BeitragDo, Jul 12, 2012 16:52
Antworten mit Zitat
Benutzer-Profile anzeigen
Ha.
Vielen Dank.
Dann benutze ich in Zukunft die Create Funktionen nicht mehr.
Finde das da schöner.

Lg, M0rgenstern

Neue Antwort erstellen


Übersicht BlitzMax, BlitzMax NG Allgemein

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group