Kurze propertys in VB.NET

  • WPF

Es gibt 13 Antworten in diesem Thema. Der letzte Beitrag () ist von kafffee.

    Kurze propertys in VB.NET

    Hallo Ihr lieben,

    ich wollte mal eine Frage stellen die mich schon länger brennend interessiert, besteht denn die Möglichkeit irgendwie auch kürzere Schreibweisen für Propertys zu verwenden ? Eins meiner Problemchen ist, das ich die Klassen sehr unübersichtlich finde, wenn jedes property aus 9 Zeilen besteht.
    Ich weiss in C# gibt es auch die Möglichkeit Propertys sehr kurz zu schreiben, in VB-Net jedoch nicht so ohne weiteres. Gibt es hier alternativen, keine Ahnung meinetwegen sowas wie eine eigene "PropertyEx Klasse" oder ähnliches, in welchem ich das Property im jeweiligen Viewmodel möglichst einzeilig schreiben kann, und so Sachen wie das GET SET oder das RaiseproPertychanged zwar funktionieren aber nicht jedesmal ausgeschrieben werden müssen ?


    LG und Danke

    Nachtrag: zur näheren erläuterung wie ich das gern nutzen würde:

    dim Iwas as new PropertyEX(PropName) aber alles sollte wieter funktionieren wie :

    VB.NET-Quellcode

    1. Private _iwas As String
    2. Public Property Iwas() As String
    3. Get
    4. Return _iwas
    5. End Get
    6. Set(ByVal value As String)
    7. _iwas = value
    8. RaisePropChanged()
    9. End Set
    10. End Property

    If Energy = Low Then
    Drink(aHugeCoffee)
    Else
    Drink(aHugeCoffeeToo)
    End If

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

    @asusdk Die kürzeste Schreibweise einer Property in VB.NET ist:

    VB.NET-Quellcode

    1. Public Property Iwas() As String
    In C# kann man da noch die Zugriffs-Modifier unternringen:

    C#-Quellcode

    1. public string Iwas { get; private set; }
    Sobald da ein ToDo im Setter ansteht, wird das ein Mehrzeiler, auch in C#:

    C#-Quellcode

    1. private string _iwas;
    2. public string Iwas
    3. {
    4. get
    5. {
    6. return _iwas;
    7. }
    8. set
    9. {
    10. _iwas = value;
    11. RaisePropChanged()
    12. }
    13. }
    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!
    hm, sowas in der Art hab ich schon fast befürchtet, aber vielen Dank für die schnelle und präzise Antwort

    LG

    Nachtrag, besteht denn keine Möglichkeit für ein ich nenn es mal RelayProperty oder dergleichen ?
    If Energy = Low Then
    Drink(aHugeCoffee)
    Else
    Drink(aHugeCoffeeToo)
    End If

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

    Hallo

    Doch, es gibt möglichkeiten. Folgende Bibliothek macht es z.b. möglich eine Klasse mit [ImplementPropertyChanged] zu Annotieren was bewirkt das alles nötige dann beim Buildvorgang passiert.

    Das würde dann wie folgt aussehen:

    C#-Quellcode

    1. [ImplementPropertyChanged]
    2. public class Person
    3. {
    4. public string GivenNames { get; set; }
    5. public string FamilyName { get; set; }
    6. }


    Ich muss aber gestehen das ich kein Fan davon bin da ich nicht mehr so schön steuern kann was welches INotify geworfen wird und es mir ja im Grunde "nix spart".

    Es gibt in VS ja die möglichkeit seine eigenen Snippets zu erstellen, somit nimmt mir VS ja die Arbeit ab.
    Ein Snippet für VB sieht dann wie folgt aus:
    Spoiler anzeigen

    XML-Quellcode

    1. <?xml version="1.0" encoding="UTF-8"?>
    2. <CodeSnippets xmlns="http://schemas.microsoft.com/VisualStudio/2005/CodeSnippet">
    3. <CodeSnippet Format="1.0.0">
    4. <Header>
    5. <SnippetTypes>
    6. <SnippetType>Expansion</SnippetType>
    7. </SnippetTypes>
    8. <Title>Eigenschaft definieren</Title>
    9. <Author>Sascha Patschka</Author>
    10. <Description>Definiert eine Eigenschaft mit einem dahinter liegenden Feld und einem Aufrauf der Methode PropertyChanged im Setter.</Description>
    11. <HelpUrl>
    12. </HelpUrl>
    13. <Shortcut>wpfprop</Shortcut>
    14. </Header>
    15. <Snippet>
    16. <Declarations>
    17. <Literal Editable="true">
    18. <ID>PropertyName</ID>
    19. <ToolTip>Ersetzen Sie dies durch einen Eigenschaftennamen.</ToolTip>
    20. <Default>NewProperty</Default>
    21. <Function>
    22. </Function>
    23. </Literal>
    24. <Literal Editable="true">
    25. <ID>PropertyType</ID>
    26. <ToolTip>Durch den Eigenschaftentyp ersetzen.</ToolTip>
    27. <Default>String</Default>
    28. <Function>
    29. </Function>
    30. </Literal>
    31. <Object Editable="true">
    32. <ID>PrivateVariable</ID>
    33. <ToolTip>Ersetzen Sie dies durch den Namen der privaten Variablen.</ToolTip>
    34. <Default>newPropertyValue</Default>
    35. <Function>
    36. </Function>
    37. <Type>Object</Type>
    38. </Object>
    39. </Declarations>
    40. <Code Language="vb" Kind="method decl" Delimiter="$"><![CDATA[Private _$PrivateVariable$ As $PropertyType$
    41. Public Property $PropertyName$() As $PropertyType$
    42. Get
    43. Return _$PrivateVariable$
    44. End Get
    45. Set(ByVal value As $PropertyType$)
    46. _$PrivateVariable$ = value
    47. RaisePropertyChanged()
    48. End Set
    49. End Property]]></Code>
    50. </Snippet>
    51. </CodeSnippet>
    52. </CodeSnippets>


    Damit muss ich nur noch wpfprop eintippen und zweimal Tab drücken. Fertich. Probiers einfach aus.
    Einfach das XML im Editor einfügen und das File unter "C:\Users\<DeinUsername>\Documents\Visual Studio 2019\Code Snippets\Visual Basic\My Code Snippets" mit der Dateiendung *.snippet abspeichern.

    Hoffe das hilft dir zumindest.

    Grüße
    Sascha
    If _work = worktype.hard Then Me.Drink(Coffee)
    Seht euch auch meine Tutorialreihe <WPF Lernen/> an oder abonniert meinen YouTube Kanal.

    ## Bitte markiere einen Thread als "Erledigt" wenn deine Frage beantwortet wurde. ##

    Was genau?
    Das Snippet oder die Bibliothek?
    If _work = worktype.hard Then Me.Drink(Coffee)
    Seht euch auch meine Tutorialreihe <WPF Lernen/> an oder abonniert meinen YouTube Kanal.

    ## Bitte markiere einen Thread als "Erledigt" wenn deine Frage beantwortet wurde. ##

    Ne, das kopierst du nur wie ich Beschrieben habe in den Ordner.
    In Visual Studio hast du auch die möglichkeit alle verfügbaren Snippets anzusehen und die Ordner zu ermitteln.
    Dann kannst sie einfach im Editor verwenden.

    Unter Extras -> Codeausschnitt-Manager ODER Strg + K, Strg + B
    Da gibt es auch den Punkt "Eigene Ausschnitte" oder so ähnlich.
    Ist sehr praktisch. So habe ich auch Snippets für RelayCommands oder andere kleinere Helferlein erzeugt.

    Grüße
    Sascha
    If _work = worktype.hard Then Me.Drink(Coffee)
    Seht euch auch meine Tutorialreihe <WPF Lernen/> an oder abonniert meinen YouTube Kanal.

    ## Bitte markiere einen Thread als "Erledigt" wenn deine Frage beantwortet wurde. ##

    Das funktioniert klasse, danke dir =)

    Nachtrag: @Nofear23m gibts für diese Art Snippets irgendwo einen Generator ? Ich wollte lediglich eines hinzufügen das mir einfach ein neues command einfügt, hab das ganze erklärngszeug rausgenommen, da ich das ja eh nicht zu gesicht krieg, und Variabel ist da ja nix, aber mein Versuch scheiterte kläglich

    Spoiler anzeigen

    XML-Quellcode

    1. <?xml version="1.0" encoding="UTF-8"?>
    2. <CodeSnippets xmlns="http://schemas.microsoft.com/VisualStudio/2005/CodeSnippet">
    3. <CodeSnippet Format="1.0.0">
    4. <Snippet>
    5. <Code Language="vb"><![
    6. Public ReadOnly Property NewCommand As New RelayCommand(AddressOf NewCommand_Execute, Function(o) True)
    7. Private Sub NewCommand_Execute(obj As Object)
    8. End Sub]]></Code>
    9. </Snippet>
    10. </CodeSnippet>
    11. </CodeSnippets>



    Ok ich habs, danke =)

    XML-Quellcode

    1. <?xml version="1.0" encoding="utf-8"?>
    2. <CodeSnippets xmlns="http://schemas.microsoft.com/VisualStudio/2005/CodeSnippet">
    3. <CodeSnippet Format="1.0.0">
    4. <Header>
    5. <Title>New Relay Command</Title>
    6. <Shortcut>rcom</Shortcut>
    7. </Header>
    8. <Snippet>
    9. <Code Language="VB">
    10. <![CDATA[Public ReadOnly Property NewCommand As New RelayCommand(AddressOf NewCommand_Execute, Function(o) True)
    11. Private Sub NewCommand_Execute(obj As Object)
    12. MessageBox.Show("Command executed")
    13. End Sub]]>
    14. </Code>
    15. </Snippet>
    16. </CodeSnippet>
    17. </CodeSnippets>

    If Energy = Low Then
    Drink(aHugeCoffee)
    Else
    Drink(aHugeCoffeeToo)
    End If

    Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von „asusdk“ ()

    Hallo

    ?????

    Das ist aber nicht schön. Willst du nun immer alles manuell Umbenennen?
    Mit deiner Vorlage hat ein Command ja immer den Namen NewCommand und das musste dann manuell umbenennen.

    Ich glaub du wendest die Snippets generell falsch an - und so sind diese ja gar keine Erleichterung mehr.

    Hier mal eine Implementierung von mir:
    Spoiler anzeigen

    XML-Quellcode

    1. <?xml version="1.0" encoding="UTF-8"?>
    2. <CodeSnippets xmlns="http://schemas.microsoft.com/VisualStudio/2005/CodeSnippet">
    3. <CodeSnippet Format="1.0.0">
    4. <Header>
    5. <SnippetTypes>
    6. <SnippetType>Expansion</SnippetType>
    7. </SnippetTypes>
    8. <Title>RelayCommand definieren</Title>
    9. <Author>Sascha Patschka für AsusDk</Author>
    10. <Description>Definiert eine ReadOnly Eigenschaft welche ein ICommand mithilfe eines RelayCommands zurückgibt</Description>
    11. <HelpUrl>
    12. </HelpUrl>
    13. <Shortcut>wpfcommand</Shortcut>
    14. </Header>
    15. <Snippet>
    16. <Declarations>
    17. <Literal Editable="true">
    18. <ID>PropertyName</ID>
    19. <ToolTip>Ersetzen Sie dies durch einen Eigenschaftennamen.</ToolTip>
    20. <Default>NewProperty</Default>
    21. <Function>
    22. </Function>
    23. </Literal>
    24. <Literal Editable="true">
    25. <ID>PropertyType</ID>
    26. <ToolTip>Durch den Eigenschaftentyp ersetzen.</ToolTip>
    27. <Default>ICommand</Default>
    28. <Function>
    29. </Function>
    30. </Literal>
    31. <Object Editable="true">
    32. <ID>PrivateVariable</ID>
    33. <ToolTip>Ersetzen Sie dies durch den Namen der privaten Variablen.</ToolTip>
    34. <Default>newPropertyValue</Default>
    35. <Function>
    36. </Function>
    37. <Type>Object</Type>
    38. </Object>
    39. </Declarations>
    40. <Code Language="vb" Kind="method decl" Delimiter="$"><![CDATA[Private _$PrivateVariable$ As $PropertyType$
    41. Public ReadOnly Property $PropertyName$() As $PropertyType$
    42. Get
    43. If _$PrivateVariable$ Is Nothing Then _$PrivateVariable$ = New RelayCommand(AddressOf $PropertyName$_Execute, Function(o) True)
    44. Return _$PrivateVariable$
    45. End Get
    46. End Property
    47. Private Sub $PropertyName$_Execute(obj As Object)
    48. Throw New NotImplementedException()
    49. End Sub
    50. ]]></Code>
    51. </Snippet>
    52. </CodeSnippet>
    53. </CodeSnippets>


    Und als kleinen Bonus noch ein kleines Video wie ich das Anwende für dich.
    Dateien
    If _work = worktype.hard Then Me.Drink(Coffee)
    Seht euch auch meine Tutorialreihe <WPF Lernen/> an oder abonniert meinen YouTube Kanal.

    ## Bitte markiere einen Thread als "Erledigt" wenn deine Frage beantwortet wurde. ##

    Naja bis heute hab ich glaub nur ein einziges Snippet verwendet, und das ist standardmäßig eingebaut, Prop und dann 2x Tab, das tut dann das gleiche wie dein wpfprop (gut bei wpf prop is ja nu das RaisePropertyChanged mit dabei). Bisher muss ich zugeben, hab ich immer mehrere Projekte offen, und hab mir Commands immer von Hand rauskopiert, im aktuellen Projekt eingefügt und dann umbenannt, da ist, dann auch die falsche Anwendung des Snippets schon mal eine deutliche erleichterung ^^ Aber ja es ist natürlich sinnvoller sich die Funktionalität mit dem automatischen umbenennen zu erhalten, dann muss ich mir das wohl durchaus genauer angucken. Danke dir auf jeden Fall für deine Mühe und für das Video, das hatt es mir viel leichter gemacht zu verstehen was du meintest =)
    If Energy = Low Then
    Drink(aHugeCoffee)
    Else
    Drink(aHugeCoffeeToo)
    End If
    @Nofear23m

    Also ich hab das Snippet wie du beschrieben hast in den Ordner kopiert. Es erscheint auch im Codeausschnittmanager. Nur, wenn ich wpfcommand eintippe, passiert nichts...

    Muss ich das im Codesausschnittmanager noch mittels Hinzufügen... in den Projektordner kopieren oder was mach ich falsch?
    Sobald Du dem Codeausschnittsmanager mitgeteilt hast, wo Deine Snippets liegen, kannst Du in Deinem Code das eintippen, was in Deinem Snippet bei <Shortcut> steht und dann Tab drücken und fertig.
    Bilder
    • Snippet1.png

      2,19 kB, 267×153, 158 mal angesehen
    • Codekürzel.png

      606 Byte, 116×53, 175 mal angesehen
    • Resultat nach Tab.png

      4,31 kB, 307×178, 60 mal angesehen
    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.