[VB .NET] porperty und arrays

Moien

Ich brauche ein Array als Property. D.h. man soll das array als ganzes ansprechen können. Lesen und Schreiben.

Ausser Stackoverflow-errors ist bis jetzt nix rausgekommen. Ist es überhaupt möglich sowas in VB zu tun ?

Das Array muss ein Property werden da bei jeder Änderung ein Event ausgelöst werden soll.

Danke.

hm…ob das mit ner Property geht weis ich nicht, ich würde das aber ganz einfach mit einer Public Variable ösen. Die ist ja dann auch aus anderen Klassen zugänglich.

Moien

hm…ob das mit ner Property geht weis ich nicht, ich würde
das aber ganz einfach mit einer Public Variable ösen.

Und wie soll ich bitte kontrollieren wann diese Variable geändert wurde ?

Und wie kann man bei Variablen die Zuweisung ungültiger Werte verhindern ?

Wie gesagt: ich _brauche_ eine Property.

Jetzt mal ganz ehrlich: kann man mit VB .NET irgendwas ausser dem About-Dialog schreiben ? Ich arbeite jetzt seit 3 Wochen damit und hab schon einen Fehler im Compiler gefunden.

(Ich greife in einer Klasse A auf eine public variable der Klasse B zu. Bei dem Namen der Variable hab ich mich aber in der Klasse A vertippt, der letzte Buchstable fehlt. Der Compiler baut mir trotzdem ohne Fehlermeldungen eine exe. Die exe schmiert ab … klasse compiler, genau das richtige zum debuggen von fremden, unkommentiertem Code…)

Danke.

Hallo pumpkin!

Deine Aussage unten, dass ein VB.NET-Compiler Syntaxfehler nicht finden soll, halte ich für sehr unwahrscheinlich. Ich nehme mal an, Du nimmst den vbc vom .NET SDK 1.1 unter Windows, oder? Der meckert definitiv bei solchen Sachen!

Wie auch immer, StackOverflowExceptions bekommst Du am leichtesten, wenn Du mit Properties hantierst und dort dann nicht mit der zugrunde liegenden Variablen arbeitest, sondern z.B. dem Property wieder den Wert zuweist - herrliche Endlosrekursion.

Die Verwendung eines Arrays als Property ist prinzipiell genau so möglich wie bei jedem anderen Typ, aber damit wirst Du nicht glücklich werden. Du bekommst nicht mit, wenn am Array etwas geändert wird, weil jeweils nur die Referenz auf das Array verwaltet wird - Property hin oder her. Du könntest höchstens feststellen, wenn ein komplett neues Array zugewiesen wird, aber ich bezweifle, dass Dir das etwas bringt.

Du bräuchtest also eine Collection, die Ereignisse beim Einfügen/Löschen/usw. von Elementen generiert, auf die Du dann reagieren kannst.
Z.B. hier: http://dorm.tunkeymicket.com/csharp/UtilityLibrary/C… gibt’s den Code für so eine CollectionWithEvents (zwar in C#, aber Du kannst Dir daraus ja eine Klassenbibliothek machen und diese dann von VB.NET aus verwenden.

Gruß,
Martin

[Bei dieser Antwort wurde das Vollzitat nachträglich automatisiert entfernt]

Hallo.

Wie gesagt: ich _brauche_ eine Property.

Dafür wäre eher das Brett ‚.NET und C#‘ zuständig :wink:
Denn: Visual Basic.NET != Visual Basic
…und die .NET Version haben wir schon wieder vergessen. .NET 2.0 ist besser als .NET 1.1x

Ausserdem gibt’s ein paar gute Seiten zu .NET, die sich mit dem Problem evtl. auskennen, z.B. http://www.dotnetframework.de (-> http://www.dotnetframework.de/glossar/details.aspx?B…), http://www.aspheute.com, …
In unserem Fall leistet die böse Suchmaschine @ „VB.NET“ +Property aber auch ganz gute Dienste: http://www.vbdotnetheaven.com/Code/Jun2003/2035.asp

(Ich greife in einer Klasse A auf eine public variable :der
Klasse B zu. Bei dem Namen der Variable hab ich mich :aber in
der Klasse A vertippt, der letzte Buchstable fehlt. Der
Compiler baut mir trotzdem ohne Fehlermeldungen eine :exe.

Keine IntelliSense ?

Die
exe schmiert ab … klasse compiler, genau das richtige :zum
debuggen von fremden, unkommentiertem Code…)

Tja ja, das kann frusten…

HTH
mfg M.L.

Moien

Deine Aussage unten, dass ein VB.NET-Compiler Syntaxfehler
nicht finden soll, halte ich für sehr unwahrscheinlich. Ich
nehme mal an, Du nimmst den vbc vom .NET SDK 1.1 unter
Windows, oder?

Visual Studio 2003 mit NET Framework 1.1 und CompactFramework X.Y

Ich nehm an das rebuild war nicht komplett. Das kenn ich schon von java. Wie der aber die exe zusammenbekommen hat ist mir ein Rätsel. Wenn ich’s nochmal hinbekomme kann ich die exe ja irgendwo posten. Was wirklich sinnvolles wird die ja dann eh nicht tun.

Wie auch immer, StackOverflowExceptions bekommst Du am
leichtesten, wenn Du mit Properties hantierst und dort dann
nicht mit der zugrunde liegenden Variablen arbeitest, sondern
z.B. dem Property wieder den Wert zuweist - herrliche
Endlosrekursion.

OK, d.h. der im set-Teil sich selbst setzt dreht er am Rad. OK, das kann man verstehen. Dann wird meine Event-kette etwas rekursiv ausgefallen sein *g*

Die Verwendung eines Arrays als Property ist prinzipiell genau
so möglich wie bei jedem anderen Typ, aber damit wirst Du
nicht glücklich werden. Du bekommst nicht mit, wenn am Array
etwas geändert wird, weil jeweils nur die Referenz auf das
Array verwaltet wird - Property hin oder her.

Autsch.

Ich seh doch in den API ständig Properties mit Klasse.Item(index as integer). Der bekommt da auch nicht mit wenn einer mit Klasse.Item(12) = irgendwas rangeht ?

Du könntest
höchstens feststellen, wenn ein komplett neues Array
zugewiesen wird, aber ich bezweifle, dass Dir das etwas
bringt.

Nee, nicht wirklich.

Du bräuchtest also eine Collection, die Ereignisse beim
Einfügen/Löschen/usw. von Elementen generiert, auf die Du dann
reagieren kannst.
Z.B. hier:

Das sieht doch gut aus, damit kann man doch mal was anfangen. Werds morgen mal auf der Arbeit vorschlagen.

cu

Moien

Wie gesagt: ich _brauche_ eine Property.

Dafür wäre eher das Brett ‚.NET und C#‘ zuständig :wink:

Das ganze Gewusel um .NET ist ja sowas von übersichtlich und klar benannt. Da fühle ich mich glatt wie zuhause bei java, J2ME, CLDC, MIDP und javaskript.

OK, als VB .NET ist näher an C# .NET (gibt’s C# auch ohne .NET ?) als an VB ?

Und wo steht VB .NET CF (CompactFramework) ?

Ausserdem gibt’s ein paar gute Seiten zu .NET, die sich mit
dem Problem evtl. auskennen, z.B.
http://www.dotnetframework.de (->
http://www.dotnetframework.de/glossar/details.aspx?B…),
http://www.aspheute.com, …
In unserem Fall leistet die böse Suchmaschine @ „VB.NET
+Property aber auch ganz gute Dienste:
http://www.vbdotnetheaven.com/Code/Jun2003/2035.asp

Da war ich schon. Aber wenn du nach dem Modus arrays baust dreht irgendwas am Rad …

Keine IntelliSense ?

Ich tipp aus Gewohnheit ohne grossartig auf Popups zu achten. Es ist subjektiv schneller den ganzen Schmoder zu tippen als die popups zu lesen und was aus der Liste auszuwählen. OK, dafür verbrate ich pro 1-2 Compilierversuche auf Tippfehler…

cu

Hallo an dieser Stelle.

Das sieht doch gut aus, damit kann man doch mal was :anfangen.
Werds morgen mal auf der Arbeit vorschlagen.

Für den Fall, dass es interessiert: es gibt einen Konverter von C# -> VB.NET unter http://www.kamalpatel.net/ConvertCSharp2VB.aspx
Das schlagwort ist jedenfalls ‚csharptovb‘ +converter :wink:
Hier noch die openbooks der Galileo Press: http://www.galileocomputing.de/katalog/openbook?Gali…
(-> eins davon handelt von VB.NET)

HTH
mfg M.L.