Zugriff des freigegebenen Members über eine Instanz - wird nicht ausgewertet

  • VB.NET
  • .NET (FX) 4.5–4.8

Es gibt 3 Antworten in diesem Thema. Der letzte Beitrag () ist von VaporiZed.

    Zugriff des freigegebenen Members über eine Instanz - wird nicht ausgewertet

    Hallo ihr Helden.

    Ich verzweifle...und brauche Tips.

    Ich habe (vereinfacht) folgende Klassen:

    VB.NET-Quellcode

    1. Public Class CellBorder
    2. Public Property width as Single
    3. Public Sub New()
    4. width = 0.5
    5. End Sub
    6. End Class
    7. Public Class zelle
    8. public property text as String
    9. public property border as CellBorder
    10. Public Sub New()
    11. text = ""
    12. border = new CellBorder()
    13. End Sub
    14. End Class


    An späterer Stelle lege ich eine Instanz von "zelle" an:

    VB.NET-Quellcode

    1. Dim z as new zelle()


    Ich kann nun Problemlos auf z.text zugreifen, aber nicht auf die Member von z.border
    Bsp:

    VB.NET-Quellcode

    1. z.text = "Das ist der Zellinhalt" 'funktioniert einwandfrei
    2. z.border.width = 0.3 'liefert die folgende Warnung

    Quellcode

    1. Zugriff des freigegebenen Members, konstanten Members, Enumerationsmembers oder geschachtelten Typs über eine Instanz; der qualifizierende Ausdruck wird nicht ausgewertet.


    Hat jemand eine Idee, warum ich hier nicht auf die Member der "Unterklasse" zugreifen kann, obwohl diese ja im Konstruktur der Klasse "zelle" ja eigentlich instantiiert werden sollte?

    Auch das setzen der Properties auf "shared" hat keine Besserung gebracht.

    HELP!

    Danke für jeden Tip.

    Grüße
    BeSt
    @BeSt Ich hab folgendes:

    VB.NET-Quellcode

    1. Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
    2. Dim z as new zelle()
    3. z.text = "Das ist der Zellinhalt" 'funktioniert einwandfrei
    4. z.border.width = 0.3 'liefert die folgende Warnung
    5. Me.Label1.Text = z.border.width.ToString()
    6. End Sub
    das funktioniert.
    Wie sind denn Deine Snippets 2 und 3 miteinbander im Code verknüpft?
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!
    Tatsächlich befinden sich die beiden Classes in einer "übergeordneten" Klasse - diese soll ein Wrapper für itext7 werden.... Also ungefähr (immernoch vereinfacht) so:

    VB.NET-Quellcode

    1. Public Class itext7Wrapper
    2. Public Class CellBorder
    3. Public Property width as Single
    4. Public Sub New()
    5. width = 0.5
    6. End Sub
    7. End Class
    8. Public Class zelle
    9. public property text as String
    10. public property border as CellBorder
    11. Public Sub New()
    12. text = ""
    13. border = new CellBorder()
    14. End Sub
    15. End Class
    16. Public Sub CreateCell(byval z as zelle)
    17. Dim c as itext7Class.Cell() 'hier steht itext7Class als Platzhalter für das umfangreiche "Zeugs" von itext7 im Hintergrund
    18. c.Add(new itext7Class.Paragraph(z.text) 'hier wird der text-Property aus der zelle verwendet - das funktioniert gut
    19. Dim b as itext7Class.SolidBorder(z.border.width) 'hier woll die Strichstärke des Rahmens aus der zelle verwendet werden und die Warnung erscheint!
    20. c.setBorder(b)
    21. 'hier wird dann c noch zu einer vorher definierten itext7Class.table hinzugefügt.....
    22. End Sub
    23. End Class


    Tatsächlich hat meine Klasse CellBorder natürlich noch weitere Properties wie Strichfarbe usw....

    Außerhalb dieser Klassendefinitionen soll so auf das ganze Konstrukt zugegriffen werden:

    VB.NET-Quellcode

    1. Dim pdf as new itext7Wrapper()
    2. dim zelle1 as new itext7Wrapper.zelle()
    3. zelle1.border = 0.3 'hier tauch auch der Fehler / die Warnung auf
    4. pdf.CreateCell(zelle1)
    Die Mitteilung

    BeSt schrieb:

    Zugriff des freigegebenen Members, konstanten Members, Enumerationsmembers oder geschachtelten Typs über eine Instanz; der qualifizierende Ausdruck wird nicht ausgewertet.
    würde höchstens durch Deinen Versuch,

    BeSt schrieb:

    Auch das setzen der Properties auf "shared" hat keine Besserung gebracht.
    noch schlimmer werden. Auch wenn man da nicht von schlimmer reden kann. Denn es geht ja nur darum, dass Du laut dieser Warnung kein instanziiertes Objekt brauchst, um Deinen Zugriff zu bekommen. Das wäre wie "Testtext".IsNullOrEmpty("Testtext"). Da wird dieselbe Warnung kommen, weil man versucht, über eine Stringinstanz auf .IsNullOrEmpty zuzugreifen, obwohl String.IsNullOrEmpty("Testtext") reichen würde.
    Das Problem, welches ich habe: Aufgrund Deines Beispielcodes in Post#1 kann ich das Verhalten nicht nachbauen. Die Warnung kommt bei mir nicht, obwohl ich alles (standardmäßig) scharf gestellt habe. Es wird bei mir über die CellBorder-Instanz auf deren Width-Wert zugegriffen. So wie geplant.
    Dieser Beitrag wurde bereits 5 mal editiert, zuletzt von „VaporiZed“, mal wieder aus Grammatikgründen.

    Aufgrund spontaner Selbsteintrübung sind all meine Glaskugeln beim Hersteller. Lasst mich daher bitte nicht den Spekulatiusbackmodus wechseln.