Type-Verständnis

Übersicht BlitzMax, BlitzMax NG Beginners-Corner

Neue Antwort erstellen

TimBo

Betreff: Type-Verständnis

BeitragSo, Feb 27, 2011 11:45
Antworten mit Zitat
Benutzer-Profile anzeigen
Kann man bei der Methode New() eines Types Parameter übergeben und wie, wie macht man das ??

Wie kann man "öffentliche" und "private" Functionen und Methoden machen?
Denn wenn ich z.B. TSchnee.RenderAll () mache , dann brauche ich ja keinen Pointer auf das spezifische Objekt. Wenn ich aber SchneeObjekt.Delete() mache, dann brauche ich ja ein Pointer darauf.

Und wie kann ich solche Global bzw. Local machen. Also bspw. eine Funtion eines Types , die nicht im Mainprogramm sichtbar ist?

Dann noch zu Variablen:
Ich kann Global und Locale Variablen machen. Wie aber erstelle ich Variablen , die nur Type-Intern gelesen werden können? Also quasi nur Functions oder Methoden im Type sollen darauf zugriff haben, nicht aber das Mainprogramm.

Danke schonmal !
TimBo
mfg Tim Borowski // CPU: Ryzen 2700x GPU: Nvidia RTX 2070 OC (Gigabyte) Ram: 16GB DDR4 @ 3000MHz OS: Windows 10
Stolzer Gewinner des BCC 25 & BCC 31
hat einen ersten Preis in der 1. Runde beim BWInf 2010/2011 & 2011/12 mit BlitzBasic erreicht.

DaysShadow

BeitragSo, Feb 27, 2011 12:04
Antworten mit Zitat
Benutzer-Profile anzeigen
Bei New kann man keine Parameter übergeben, da man die New Methode von Object überschreibt, dabei dürfen aber Rückgabewert und Parameter nicht geändert werden.

Public/Private gibt es nicht, das liegt dann lediglich an dir, das irgendwie einzuhalten.
Von daher erübrigt sich auch der Rest deiner Fragen, du kannst alle Variablen überall auslesen, Variablen und Funktionen eines Types halt sowieso überall mit Type.Funktion oder Type.Variable und Fields und Methoden halt nur mit einem erstellten Objekt.
Blessed is the mind too small for doubt

mpmxyz

BeitragSo, Feb 27, 2011 12:23
Antworten mit Zitat
Benutzer-Profile anzeigen
Delete ist übrigens keine Methode, die man selbst aufrufen sollte. BlitzMax macht das automatisch.
Ich kenne zwei Alternativen zum Simulieren eines Konstruktors mit Parametern:
1. eine Init-Methode, die zur Vereinfachung Self zurückgibt
2. eine Create-Funktion, die ein neues Objekt zurückgibt
(3. beides, wobei in der Create-Methode nur "Return New TMyType.Init(parameter)" steht)
Es gibt außerdem einen Pseudostandard, dass man privates mit einem Unterstrich ("_") kennzeichnet.
mfG
mpmxyz
Moin Moin!
Projekte: DBPC CodeCruncher Mandelbrot-Renderer

BladeRunner

Moderator

BeitragSo, Feb 27, 2011 16:02
Antworten mit Zitat
Benutzer-Profile anzeigen
Private und Public existieren in BMax nur Dateiweit, d.h. Du kannst mir Private einen Type vor dem Zugriff ausserhalb seines eigenen Quellcodes schützen. Dies gilt jedoch nur für ganze Types, einzelne Felder kann man nicht privat deklarieren.

Function ist das was Du als öffentlich bezeichnest - ein Zugriff auf die Klasse.
Method ist das was Du als privat bezeichnet hast: ein Zugriff auf eine einzelne Instanz.

Types in BMax haben KEINE interne Liste mehr, d.h. Du selbst bist dafür verantwortlich deine erstellten Instanzen zu verwalten. Das ist ein wesentlicher Unterschied zu BB.
Befasse Dich in dem Zusammenhang am besten mit TList und TMap.
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

TimBo

BeitragSo, Feb 27, 2011 21:04
Antworten mit Zitat
Benutzer-Profile anzeigen
Hi,

vielen Dank erstmal für eure Beiträge !!


Ich wollte auch eine "Public Shared List" machen, aber das hat sich ja dann erledigt, da es ja alles "Public" ist. Wink

Noch eine Frage:
gibt es Shared Variablen in BMax ? Also ein Field , dass alle Objekte gleich haben?
Oder muss ich die Liste als Globale Variable im Mainprogramm erstellen?

Grüße
TimBo
mfg Tim Borowski // CPU: Ryzen 2700x GPU: Nvidia RTX 2070 OC (Gigabyte) Ram: 16GB DDR4 @ 3000MHz OS: Windows 10
Stolzer Gewinner des BCC 25 & BCC 31
hat einen ersten Preis in der 1. Runde beim BWInf 2010/2011 & 2011/12 mit BlitzBasic erreicht.

Lobby

BeitragSo, Feb 27, 2011 21:30
Antworten mit Zitat
Benutzer-Profile anzeigen
Ja, man kann statt der Felder auch einfach ein Global innerhalb des Types definieren.

Ein Beispiel:
BlitzMax: [AUSKLAPPEN]
Type TTest
Global myList:TList=New TList
'...
Method New()
Self.myList.AddLast(Self)
End Method
'...
End Type


Innerhalb von Methoden kann man auf solche Globalen, wie gezeigt, mit Hilfe von self zurückgreifen. Zusätzlich kann man, wie bei innerhalb des Types definierten Funktionen, dieses auch weglassen (der Scope ist dort schließlich standardmäßig auf den entsprechenden Type gesetzt). Um von außen auf solch eine Variable Zugriff zu erlangen, gibt man einfach den Type als Scope an, also passend zum gegebenen Beispiel:
BlitzMax: [AUSKLAPPEN]
Local list:TList=TTest.myList
TheoTown - Eine Stadtaufbausimulation für Android, iOS, Windows, Mac OS und Linux
  • Zuletzt bearbeitet von Lobby am Mo, Feb 28, 2011 19:30, insgesamt einmal bearbeitet

TimBo

BeitragSo, Feb 27, 2011 21:42
Antworten mit Zitat
Benutzer-Profile anzeigen
ahhh !!! THX !!

jetzt hab ichs gerafft. Ich glaube der Ausflug in VBasic hat mein Verständnis aufpoliert =)
mfg Tim Borowski // CPU: Ryzen 2700x GPU: Nvidia RTX 2070 OC (Gigabyte) Ram: 16GB DDR4 @ 3000MHz OS: Windows 10
Stolzer Gewinner des BCC 25 & BCC 31
hat einen ersten Preis in der 1. Runde beim BWInf 2010/2011 & 2011/12 mit BlitzBasic erreicht.

Shinkiro1

ehemals "Espada"

BeitragMo, Feb 28, 2011 13:21
Antworten mit Zitat
Benutzer-Profile anzeigen
eine Möglichkeit:

Code: [AUSKLAPPEN]

Type TTest
   Field a:Int

  Method Create:TTest( param1 )
    Self.a = param1
    Return Self
  EndMethod

EndType
Blog :: Ein RPG in 3 Monaten erstellen
Twitter :: News zum Projekt
 

BBPro2

BeitragMo, Feb 28, 2011 21:09
Antworten mit Zitat
Benutzer-Profile anzeigen
hi,

steht auch alles hier drin:
http://zehr.de/downloads/BlitzMax-OOP.pdf

sollte man mal gelesen haben wenn man noch nicht so recht weiß wie bmax funktioniert

TimBo

BeitragMo, Feb 28, 2011 23:12
Antworten mit Zitat
Benutzer-Profile anzeigen
ich werde es mir auf jedenfall durchlesen ! Kannte nur die angegebene Adresse noch nicht. Smile
mfg Tim Borowski // CPU: Ryzen 2700x GPU: Nvidia RTX 2070 OC (Gigabyte) Ram: 16GB DDR4 @ 3000MHz OS: Windows 10
Stolzer Gewinner des BCC 25 & BCC 31
hat einen ersten Preis in der 1. Runde beim BWInf 2010/2011 & 2011/12 mit BlitzBasic erreicht.
 

BBPro2

BeitragDi, März 01, 2011 3:58
Antworten mit Zitat
Benutzer-Profile anzeigen
kein problem, tu das.
findet sich (mit ein paar anderen nützlichen links) unter "szene" -> "links" -> "tutorials" oder so ähnlich auf dieser seite hier.

Neue Antwort erstellen


Übersicht BlitzMax, BlitzMax NG Beginners-Corner

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group