Das Zurückkopieren des ByRef-Parameters '<Parametername>' in das entsprechende Argument führt zu einer Einschränkung von Typ '<Typname1>' auf Typ '<Typname2>'
Aktualisiert: November 2007
Copying the value of 'ByRef' parameter '<parametername>' back to the matching argument narrows from type '<typename1>' to type '<typename2>'
Eine Prozedur wird mit einem Argument aufgerufen, das den entsprechenden Parametertyp erweitert, und die Konvertierung vom Parameter in das Argument führt zu einer Einschränkung.
Wenn Sie eine Klasse oder Struktur definieren, können Sie einen oder mehrere Konvertierungsoperatoren festlegen, um den Klassen- oder Strukturtyp in andere Typen zu konvertieren. Sie können auch Konvertierungsoperatoren für die umgekehrte Konvertierung festlegen, um die anderen Typen in den Klassen- oder Strukturtyp zurückzukonvertieren. Wenn Sie den Klassen- oder Strukturtyp in einem Prozeduraufruf verwenden, kann Visual Basic mithilfe dieser Konvertierungsoperatoren den Typ eines Arguments in den Typ des entsprechenden Parameters konvertieren.
Wenn Sie das Argument ByRef übergeben, kopiert Visual Basic zuweilen den Argumentwert in eine lokale Variable in der Prozedur, statt einen Verweis zu übergeben. In diesem Fall muss Visual Basic anschließend beim Beenden der Prozedur den Wert der lokalen Variablen in das Argument im aufrufenden Code zurückkopieren.
Wenn der Wert eines ByRef-Arguments in die Prozedur kopiert wird und Argument sowie Parameter denselben Typ aufweisen, ist keine Konvertierung erforderlich. Wenn sich die Typen jedoch unterscheiden, muss Visual Basic in beide Richtungen konvertieren. Wenn es sich bei einem der Typen um den Klassen- oder Strukturtyp handelt, muss Visual Basic beide Typen in den jeweils anderen Typ konvertieren. Wenn eine dieser Konvertierungen eine Erweiterungskonvertierung ist, ist die umgekehrte Konvertierung möglicherweise eine einschränkende Konvertierung.
Fehler-ID: BC32053
So beheben Sie diesen Fehler
Verwenden Sie nach Möglichkeit ein aufrufendes Argument von demselben Typ wie der Prozedurparameter, damit Visual Basic keine Konvertierung ausführen muss.
Wenn Sie die Prozedur mit einem anderen Argumenttyp als dem Parametertyp aufrufen müssen, jedoch in das aufrufende Argument kein Wert zurückgegeben werden muss, definieren Sie den Parameter als ByVal statt als ByRef.
Wenn in das aufrufende Argument ein Wert zurückgegeben werden muss, definieren Sie den Operator für die umgekehrte Konvertierung nach Möglichkeit als Widening.
Siehe auch
Aufgaben
Gewusst wie: Definieren eines Operators
Gewusst wie: Definieren eines Konvertierungsoperators
Konzepte
Parameter und Argumente von Prozeduren
Übergeben von Argumenten als Wert und als Verweis
Erweiternde und eingrenzende Konvertierungen