| |
VB.NET - Ein- und UmsteigerRe: Property gibt 2x hintereinander angewendet Unterschiedliches aus. | | | Autor: Basti78 | Datum: 09.08.15 16:03 |
|
Hallo,
in meinem vorangegangenen Artikel habe ich die Bedeutungen von ByVal und ByRef vertauscht. Bei Objekten ist dies aber eh egal, ob diese per ByRef oder ByVal übergeben werden, da diese Referenztypen sind und dort das Ergebnis dasselbe ist.
Zunächst einmal sei gesagt, dass ich die hier angeführte Klassenstruktur nur der Übersichtlichkeit halber minimal dargestellt habe. In Wahrheit ist "Base" selbst eine abgeleitete Klasse, da ich eine abstrakte Klasse definiert habe, die ich als Basis für alle meine Objekte, auch andere als die angesprochenen Wrapper, aufgebaut habe.
Was die gezeigte Objektstruktur anbetrifft, benötige ich diese längere Struktur aus folgendem Grunde:
1) In Base habe ich alle für mich wichtigen Methoden von System.Windows.Forms.Control auf meine Base-Klasse als Mustoverride übertragen und in Base(Of T) dann mit Overrides überschrieben, um dort alles auf VObject zu übertragen oder von VObject abzufragen. Dass ich die Methoden bereits in Base (und nicht erst in Base(Of T)) definiert habe, hat zwei Gründe:
1a) Ich wollte nicht für jedes Control (Button, Checkbox, DataGridView, etc.) alle aus System.Windows.Forms.Control übernommenen Methoden noch einmal definieren, sondern nur einmal.
1b) Außerdem hat das den Vorteil, dass ich bei einem Durchlauf im Sinne von "For Each X As Base in Y" in einer Collection, auch mit unterschiedlichen Base-Typen (also Base(Of System.Windows.Forms.Button), Base(Of System.Windows.Forms.Checkbox), etc.), auf alle Methoden der ihnen gemeinsamen Control-Klasse zugreifen kann, was nicht möglich wäre, wenn diese erst ab Base(Of T) definiert wären. Da aber in Base wiederum noch kein VObject mangels Typdefinition T existiert, habe ich diese Methoden dort als MustOverride deklariert.
2) Die hier angesprochene Methode ASub ist nur als Vereinfachung einer Methode dargestellt, die bei meinem Objekt eher folgendes tut: Ich habe die Methode Control.Controls.Add nicht direkt auf Base(Of T) übertragen, sondern durch "ASub" (ohne dass ich hier im Beispiel auf die Anweisungen im Detail eingegangen bin, um es übersichtlich zu halten und die Methode recht lang ist) ersetzt, da diese neben dem Hinzufügen des eingehüllten INPUT-Controls zur Collection des eingehüllten Controls des Objekts, dem die Methode ASub gehört, auch noch etwas anderes machen soll. Dieses "etwas anderes machen" ist bei jedem der Controltypen unterschiedlich definiert und daher habe ich als weitere Klasse "Derived" für die entgültigen Klassen gewählt, da diese Methode bei Base(Of T ) nicht allgemein definierbar war.
Nun habe ich leider immer noch keine Möglichkeit gefunden, wie ich INPUT so übergeben kann, dass tatsächlich das darin eingehüllte Objekt übergeben wird, um damit innerhalb der Methode agieren zu können. Was muss ich also tun, um der Methode das originale eingehüllte Objekt übergeben zu können, um damit innerhalb der Methode zu arbeiten und kein "Nothing" zu erhalten?
| |
| Sie sind nicht angemeldet! Um auf diesen Beitrag zu antworten oder neue Beiträge schreiben zu können, müssen Sie sich zunächst anmelden.
Einloggen | Neu registrieren |
|
|
Neu! sevEingabe 3.0
Einfach stark!
Ein einziges Eingabe-Control für alle benötigten Eingabetypen und -formate, inkl. Kalender-, Taschenrechner und Floskelfunktion, mehrspaltige ComboBox mit DB-Anbindung, ImageComboBox u.v.m. Weitere InfosTipp des Monats Access-Tools Vol.1
Über 400 MByte Inhalt
Mehr als 250 Access-Beispiele, 25 Add-Ins und ActiveX-Komponenten, 16 VB-Projekt inkl. Source, mehr als 320 Tipps & Tricks für Access und VB
Nur 24,95 EURWeitere Infos
|
|
|
Copyright ©2000-2024 vb@rchiv Dieter Otter Alle Rechte vorbehalten.
Microsoft, Windows und Visual Basic sind entweder eingetragene Marken oder Marken der Microsoft Corporation in den USA und/oder anderen Ländern. Weitere auf dieser Homepage aufgeführten Produkt- und Firmennamen können geschützte Marken ihrer jeweiligen Inhaber sein.
Diese Seiten wurden optimiert für eine Bildschirmauflösung von mind. 1280x1024 Pixel
|
|