Property einzeilig

  • VB.NET

Es gibt 9 Antworten in diesem Thema. Der letzte Beitrag () ist von BlueLagoonX.

    Property einzeilig

    Moin,

    ich verwende derzeit immer mehr Properties um bestimmte Eigenschaften eines Objektes zu generieren oder um sie anzuzeigen.

    Nun wird dies auf Dauer bei vielen Properties, die eigentlich nur wenige Zeilen groß sind, echt unübersichtlich.

    Hier mal ein Beispiel;

    VB.NET-Quellcode

    1. Public Shared ReadOnly Property TableName As String
    2. Get
    3. Return Reflection.MethodBase.GetCurrentMethod.DeclaringType.Name
    4. End Get
    5. End Property


    Kann man diese einzeilig machen?

    Grüße :)
    In VB.NET kannst du ne konstante ReadOnly-Property initialisieren (​Public Shared ReadOnly Property A As B = C), je nachdem musst du aber ausprobieren, ob deine Funktionsaufrufe dann noch im Kontext vom Getter ausgeführt werden - mit deinem Reflection-Zeug geht das eventuell nicht.
    Nein, das geht nicht. Da wird nur der Initialwert in der verkürzten ReadOnly-Property aufbewahrt:

    VB.NET-Quellcode

    1. Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
    2. Dim Foo As New Foo
    3. Dim ValueOfBuzz = Foo.Buzz '= 1, ok
    4. Foo.ChangeBar()
    5. Dim ValueOfBuzzAfterChangingBar = Foo.Buzz '= 1, nicht ok, sollte 2 sein
    6. End Sub
    7. '…
    8. Public Class Foo
    9. Private Bar As Integer = 1
    10. ReadOnly Property Buzz As Integer = Bar
    11. Public Sub ChangeBar()
    12. Bar = 2
    13. End Sub
    14. End Class
    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.

    BlueLagoonX schrieb:

    Schade, aber nicht zu ändern
    M.M. schon...
    Man kann in der Klasse Foo die Wertzuweisung der ReadOnly-Property über sein Backingfield machen...

    VB.NET-Quellcode

    1. Public Class Foo
    2. Private Bar As Integer = 1
    3. ReadOnly Property Buzz As Integer = Bar
    4. Public Sub ChangeBar()
    5. Bar = 2
    6. _Buzz = Bar 'Wertzuweisung des Backingfield von Buzz
    7. End Sub
    8. End Class​
    Richtig, das wäre möglich, ist aber nicht das was ich suche.

    Ich hätte es gerne, dass wirklich das gesamte Property vom Public bis zum End in einer einzigen Zeile steht.

    Als Beispiel;

    VB.NET-Quellcode

    1. ​Public Shared ReadOnly Property TableName As String [Get Return Reflection.MethodBase.GetCurrentMethod.DeclaringType.Name End Get End Property]


    statt dem, was ich oben geschrieben hatte.

    Möglicherweise wurde meine Frage falsch verstanden?
    Nee, das haben wir schon richtig verstanden. @VB1963s Antwort war ja quasi auf meine bezogen, in der ich behauptet habe, dass die Änderung des ReadOnlyAuto-Property-Wertes nicht möglich sei. Da er mir das BackingField wieder in Erinnerung gerufen hat, bekam er von mir ein [Hilfreich]. Dass das bei Deinem Problem keine Lösung ist, ist klar.
    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.
    @BlueLagoonX Welchen Hintergrund hat Dein Problem?
    Hast Du einen 500 Zeichen breiten aber nur 20 Zeilen hohen Bildschirm?
    Wenn Dir die Höhe im Quelltext zu hoch ist, kannst Du da eine #Region drum herum machen und das ganze im Editor zusammenklappen.

    VB.NET-Quellcode

    1. #Region "Property TableName"
    2. Public Shared ReadOnly Property TableName As String
    3. Get
    4. Return Reflection.MethodBase.GetCurrentMethod.DeclaringType.Name
    5. End Get
    6. End Property
    7. #End Region

    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!
    In einigen Klassen habe ich bis zu 50 Properties, einfache und erweiterte.

    Einige sind, wie TableName nur 5 Zeilen hoch, andere bis zu 100.
    Mit Regions arbeite ich bereits, helfen auch schon viel.

    Allerdings suche ich derzeit einfach nur nach Möglichkeiten, Code einzukürzen.
    Partial Classes verwende ich ebenfalls, wenn es Sinn ergibt.

    Die meisten dieser "Problem Properties" die ich einkürzen möchte, geben nur ein- bis dreizeilige Berechnungen aus anderen (Private) Properties der Klasse zurück, welche zur Laufzeit aktualisiert und abgerufen werden müssen.

    Die Monitor-Größe ist nicht das Problem, ich versuche einfach nur so einfach wie möglich Code und Platz zu sparen, auch zu Gunsten der Lesbarkeit.