Property

  • VB.NET

Es gibt 16 Antworten in diesem Thema. Der letzte Beitrag () ist von RodFromGermany.

    Hallo ich habe eine Property angelegt um die Werte darin im ganzen Programm verwenden zu können. Jetzt hätte ich eine Frage: Vor ein paar Tagen ging es noch jetzt auf einmal zeigt mit im Einzelschrittdebuggen immer die 0 an obwohl die Werte eindeutig zugewiesen sind. Vor allem es ging schonmal, habe echt keinen schimmer warum auf einmal nicht mehr.

    VB.NET-Quellcode

    1. Private mittelx As Single
    2. Private mittely As Single
    3. Private mittelz As Single
    4. Private rkk As Single
    5. Private radiushf As Single
    6. Public Property mittel() As Single
    7. Get
    8. Return mittelx
    9. Return mittely
    10. Return mittelz
    11. Return rkk
    12. Return radiushf
    13. End Get
    14. Set(ByVal value As Single)
    15. mittelx = 28
    16. mittely = 58
    17. mittelz = -89
    18. rkk = 5
    19. radiushf = 5
    20. End Set
    21. End Property

    Edit by ErfinderDesRades:
    Mahony, wenn du Code postest, bitte drauf achten, dass in den Einstellungen des Posts "BBCode aktivieren" aktiv ist.
    und: VB-Tag richtig benutzen


    Gruß Mahony

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „ErfinderDesRades“ ()

    so komplex ist mein Programm noch nicht nutze die Werte momentan nur zum berechnen also wird nix überschrieben. sonst müsste ich byref oder so machen gell?en im
    Im bild unten ist zu sehen damit die Variablen 0 haben obwohl doch ein Wert zugewiesen wird.
    Bilder
    • property schrott.jpg

      241,26 kB, 1.440×900, 124 mal angesehen

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „mahony“ ()

    mahony schrieb:

    VB.NET-Quellcode

    1. Get
    2. Return mittelx
    3. Return mittely
    4. Return mittelz
    5. Return rkk
    6. Return radiushf
    7. End Get
    Ja was soll er denn nun returnen :?: :?: :?:
    Nimm Option strict On,
    mach die Properties richtig und lies die Warnungen des Comlilers.
    Poste bitte Deinen Code ohne Zeilennummern, dann greift der VB-Tag auch richtig
    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!
    Noch nichts aber wenn er mittelx,y,z neu errechnet hat soll er den wert returnen und ändern, der Compiler zeigt keine Fehler an. Wenn ich strict on einfüge kommen total viele Fehler, das komische finde ich ist damit es schon lief.

    mahony schrieb:

    Wenn ich strict on einfüge kommen total viele Fehler

    Dann mach die mal alle fein säuberlich weg.
    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!
    Das ist eine Property:

    VB.NET-Quellcode

    1. Private _mittel As Single
    2. Public Property mittel() As Single
    3. Get
    4. Return _mittel
    5. End Get
    6. Set(ByVal value As Single)
    7. _mittel = value
    8. End Set
    9. End Property
    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!

    RodFromGermany schrieb:

    VB.NET-Quellcode

    1. mittel = 15
    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!
    Vor der Property oder danach ist egal. und wenn man neue Werte dafür hat die dann einfach zuweisen, ich frag mich nur warum meine Version gegangen ist am anfang, aber bestimmt nur einmal. Kann mann dann ein Ergebnis einfach = mittel machen dann wird der neue Wert übernommen?

    Ist dann mittel =15, schreibt er den Wert dann in _mittel oder in mittel?

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „mahony“ ()

    _mittel ist in dem fall die Variable. Mittel ist die Property die die Variable kapselt.
    _mittel ist also sozusagend genau das gleiche wie mittel. Im Get-Part der Property wird ja _mittel returned, im Set-Part wird _mittel gesetzt.
    Ich beziehe mich auf den Code aus Post #11, da deiner (mit den fünf Returns) humbuk ist und nicht funktionieren KANN.

    Warum benutzt man Properties?
    Ganz einfach, ich erkläre es mal anhand einer Form. Die Form hat u.A. die Property "Size". Wenn du diese veränderst, dann verändert sich augenblicklich auch die Formgröße - wie es eben sein soll. Doch woher weiß das Programm, dass der Wert sich verändert hat? Wird da etwa ständig überprüft ob sich Size verändert hat? Natürlich nciht. Im Property-Code, genauer gesagt im Set-Teil, kann man z.B. sagen, dass sich die Form neuzeichnen soll - so wird die veränderte Größe "sichtbar" und das genau dann, wenn sich die Variable ändert bzw ihr ein Wert zugewiesen wird.

    Size ist dabei keine Variable, sondern eine Property, die eine andere Variable (vermutlich _size) kapselt. Das heißt _size speichert den Wert - über Size wird dieser allerdings geändert oder zur verfügung gestellt. So kann der Programmierer überwachen welche Werte ein und ausgegeben werden. Besonders der input kann ja fehlerhaft sein: überlege mal du willst deiner Form eine Size von (-5,-99) übergeben. Klappt natürlich nciht. Warum? - weil jede Kantenlänge größer als 0 sein sollte. Auch das kannst du im Set-Part der Property überprüfen, ggf. das "abspeichern" von value in der Property-Variable (_Size) unterbinden/standartwert setzten/alten wert beibehalten/exception throw'en etc.

    Hoffe das war ausführlich genug xD

    Wichtig für dich: _mittel einfahc in ruhe lassen und nur über Mittel arbeiten. Veränderst du Mittel, so verändert sich auch _mittel. (Bezogen auf #11)

    Großes BTW:
    So kann man Standartwerte setzten + kleines Beispiel der Input-Prüfung.

    VB.NET-Quellcode

    1. Private _mittel As Single = 11 'Der Standartwert
    2. Public Property mittel() As Single
    3. Get
    4. Return _mittel'Der Wert wird zurückgegeben
    5. End Get
    6. Set(ByVal value As Single)
    7. if value > 0 then
    8. _mittel = value 'hier wird der wert gesetzt wenn er größer als 0 ist
    9. else
    10. Throw New Exception ("Werte größer als Null sind erforderlich!")
    11. 'Alternativ: nix machen - mittel bleibt gleich da _mittel nicht verändert wurde.
    12. end if
    13. End Set
    14. End Property

    Dieser Beitrag wurde bereits 3 mal editiert, zuletzt von „FreakJNS“ ()

    Properties setzt man auch instanzübergreifend ein, und dann kann man ihnen den Status Public Get, Private Set verpassen, das ist gelegentlich sehr nützlich.

    VB.NET-Quellcode

    1. Private _mittel As Single = 11 'Der Standartwert
    2. Public Property mittel() As Single
    3. Get
    4. Return _mittel 'Der Wert wird zurückgegeben
    5. End Get
    6. Private Set(ByVal value As Single)
    7. _mittel = value 'hier wird der wert gesetzt
    8. End Set
    9. End Property
    oder

    VB.NET-Quellcode

    1. Private _mittel As Single = 11 'Der Standartwert
    2. Public ReadOnly Property mittel() As Single
    3. Get
    4. Return _mittel 'Der Wert wird zurückgegeben
    5. End Get
    6. End Property
    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!