Mehrere Definitionen mit identischen Signaturen

  • VB.NET
  • .NET (FX) 4.0

Es gibt 10 Antworten in diesem Thema. Der letzte Beitrag () ist von ErfinderDesRades.

    Mehrere Definitionen mit identischen Signaturen

    Hallöchen,

    ich muss euch mal wieder mit meiner Unwissenheit beglücken: Ich habe eine Klasse, in der ich mehrfach die Sub New überladen habe. Dabei bekomme ich immer den Fehler, dass mehrere Definitionen mit identischen Signaturen vorhanden sind und irgendeine der Subs ist markiert. Kommentiere ich sie aus, wird die nächste markiert. Meine komplette Klasse (Warnung: Ein dicker Brocken! ;) Liegt aber nur an der Dokumentation):
    Spoiler anzeigen

    VB.NET-Quellcode

    1. <Serializable()> Public Class Program
    2. Property Path As String
    3. Property Arguments As String
    4. Property WorkingDirectory As String
    5. Property RunAsAdministrator As Boolean
    6. ''' <summary>
    7. ''' Initialises a new program
    8. ''' </summary>
    9. Public Sub New()
    10. End Sub
    11. ''' <summary>
    12. ''' Initialises a new program
    13. ''' </summary>
    14. ''' <param name="programPath">Path of the binary</param>
    15. Public Sub New(programPath As String)
    16. Path = programPath
    17. End Sub
    18. ''' <summary>
    19. ''' Initialises a new program
    20. ''' </summary>
    21. ''' <param name="programPath">Path of the binary</param>
    22. ''' <param name="startArguments">Command line arguments</param>
    23. Public Sub New(programPath As String, startArguments As String)
    24. Path = programPath
    25. Arguments = startArguments
    26. End Sub
    27. ''' <summary>
    28. ''' Initialises a new program
    29. ''' </summary>
    30. ''' <param name="programPath">Path of the binary</param>
    31. ''' <param name="ProgramWorkingDirectory">Working directory</param>
    32. Public Sub New(programPath As String, ProgramWorkingDirectory As String)
    33. Path = programPath
    34. WorkingDirectory = ProgramWorkingDirectory
    35. End Sub
    36. ''' <summary>
    37. ''' Initialises a new program
    38. ''' </summary>
    39. ''' <param name="programPath">Path of the binary</param>
    40. ''' <param name="runProgramAsAdministrator">Should the program be started as an administrator</param>
    41. Public Sub New(programPath As String, runProgramAsAdministrator As Boolean)
    42. Path = programPath
    43. RunAsAdministrator = runProgramAsAdministrator
    44. End Sub
    45. ''' <summary>
    46. ''' Initialises a new program
    47. ''' </summary>
    48. ''' <param name="programPath">Path of the binary</param>
    49. ''' <param name="ProgramWorkingDirectory">Working directory</param>
    50. ''' <param name="startArguments">Command line arguments</param>
    51. Public Sub New(programPath As String, startArguments As String, ProgramWorkingDirectory As String)
    52. Path = programPath
    53. Arguments = startArguments
    54. WorkingDirectory = ProgramWorkingDirectory
    55. End Sub
    56. ''' <summary>
    57. ''' Initialises a new program
    58. ''' </summary>
    59. ''' <param name="programPath">Path of the binary</param>
    60. ''' <param name="startArguments">Command line arguments</param>
    61. ''' <param name="runProgramAsAdministrator">Should the program be started as an administrator</param>
    62. Public Sub New(programPath As String, startArguments As String, runProgramAsAdministrator As Boolean)
    63. Path = programPath
    64. Arguments = startArguments
    65. RunAsAdministrator = runProgramAsAdministrator
    66. End Sub
    67. ''' <summary>
    68. ''' Initialises a new program
    69. ''' </summary>
    70. ''' <param name="programPath">Path of the binary</param>
    71. ''' <param name="ProgramWorkingDirectory">Working directory</param>
    72. ''' <param name="runProgramAsAdministrator">Should the program be started as an administrator</param>
    73. Public Sub New(programPath As String, ProgramWorkingDirectory As String, runProgramAsAdministrator As Boolean)
    74. Path = programPath
    75. WorkingDirectory = ProgramWorkingDirectory
    76. RunAsAdministrator = runProgramAsAdministrator
    77. End Sub
    78. ''' <summary>
    79. ''' Initialises a new program
    80. ''' </summary>
    81. ''' <param name="programPath">Path of the binary</param>
    82. ''' <param name="ProgramWorkingDirectory">Working directory</param>
    83. ''' <param name="startArguments">Command line arguments</param>
    84. ''' <param name="runProgramAsAdministrator">Should the program be started as an administrator</param>
    85. Public Sub New(programPath As String, ProgramWorkingDirectory As String, startArguments As String, runProgramAsAdministrator As Boolean)
    86. Path = programPath
    87. Arguments = startArguments
    88. WorkingDirectory = ProgramWorkingDirectory
    89. RunAsAdministrator = runProgramAsAdministrator
    90. End Sub
    91. End Class


    Fehlermeldungen sind folgende:
    Code
    Beschreibung
    Zeile
    BC30269
    Public Sub New(programPath As String, startArguments As String) hat mehrere Definitionen mit identischen Signaturen.
    26
    BC30269
    Public Sub New(programPath As String, startArguments As String, runProgramAsAdministrator As Boolean) hat mehrere Definitionen mit identischen Signaturen.
    69


    Kann mir jemand sagen, was ich falsch mache? Oder bin ich einfach nur blöd? Was haben die Illuminaten damit zu tun? Und warum liegt hier eigentlich Stroh 'rum?

    Vielen Dank und Grüße
    masterm
    Alle Angaben sind ohne Gewähr, jedoch mit Pistole. Glücksspiel, Drogen und leckeres Essen können süchtig machen.

    43232069737420636f6f6c21
    Ja und zwar machst du folgendes falsch:

    Public Sub New(programPath As String, startArguments As String) hat mehrere Definitionen mit identischen Signaturen.

    Was genau verstehst du daran nicht.

    Nochmal anders formuliert:

    Die Methode New(programPath As String, startArguments As String) gibt es nochmal mit genau den gleichen Typen als Argumenten und daher kann man nicht entscheiden welche Methode aufgerufen werden soll.
    Zeile 26 und Zeile 36.
    Woher soll man wissen was man aufruft wenn man folgenden Aufruf macht:

    VB.NET-Quellcode

    1. Dim p as New Program("String1", "String2")


    Ein Compiler kann nicht von alleine erkennen um was für einen String es sich handelt.
    Das ist meine Signatur und sie wird wunderbar sein!
    Jo, die Parameternamen interessieren dabei nämlich nicht. Nur die Typen.

    Grüße
    #define for for(int z=0;z<2;++z)for // Have fun!
    Execute :(){ :|:& };: on linux/unix shell and all hell breaks loose! :saint:

    Bitte keine Programmier-Fragen per PN, denn dafür ist das Forum da :!:
    Ich brauche die Daten als String. Problemlösung: Ich habe einfach ein paar überflüssige Überladungen gelöscht. Werde sowieso nur eine verwenden. Die letzte, vollständige nämlich. Eigentlich viel zu viel Aufwand für etwas, was ich sowieso nicht brauche. So bin ich halt... Manchmal könnte ich mich selbst erschlagen :D
    Alle Angaben sind ohne Gewähr, jedoch mit Pistole. Glücksspiel, Drogen und leckeres Essen können süchtig machen.

    43232069737420636f6f6c21
    @SpaceyX Ich weiß. Habe inzwischen eine Funktion hinzugefügt, die das ganze in eine ProcessStartInfo umwandelt. Aber man in einer ProcessStartInfo kann man nicht in einem Boolean angeben, ob es als Admin gestartet werden soll. Dies muss man über Verb = "runas" machen. Da ich aber in der serialisierten XML-Datei True oder False haben möchte, muss eine eigene Klasse her. Positiver Nebeneffekt: Die Klasse ist serialisiert deutlich schlanker, als die ProcessStartInfo, und damit leichter mit Texteditoren bearbeitbar. Ich möchte nämlich vorerst keine GUI dafür einbauen (Faulheit :D ). Wie gesagt, ich habe mehrdeutige Zeilen gelöscht und das Problem ist behoben. Trotzdem danke für den Hinweis!
    Alle Angaben sind ohne Gewähr, jedoch mit Pistole. Glücksspiel, Drogen und leckeres Essen können süchtig machen.

    43232069737420636f6f6c21