Nota
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare ad accedere o modificare le directory.
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare a modificare le directory.
Aggiornamento: novembre 2007
Default property access is ambiguous between the inherited interface members '<defaultpropertyname>' of interface '<interfacename1>' and '<defaultpropertyname>' of interface '<interfacename2>'
Un'interfaccia eredita da due interfacce, ciascuna delle quali dichiara una proprietà predefinita con lo stesso nome. Il compilatore non è in grado di risolvere un accesso alla proprietà predefinita senza qualificazione. Nell'esempio riportato di seguito viene illustrata questa situazione.
Public Interface Iface1
Default Property prop(ByVal arg As Integer) As Integer
End Interface
Public Interface Iface2
Default Property prop(ByVal arg As Integer) As Integer
End Interface
Public Interface Iface3
Inherits Iface1, Iface2
End Interface
Public Class testClass
Public Sub accessDefaultProperty()
Dim testObj As Iface3
Dim testInt As Integer = testObj(1)
End Sub
End Class
Quando si specifica testObj(1), il compilatore tenta di risolverlo nella proprietà predefinita. Poiché per la presenza delle interfacce ereditate sono presenti due possibili proprietà predefinite, il compilatore segnala l'errore.
ID errore: BC30686
Per correggere l'errore
Evitare di ereditare membri con lo stesso nome. Nell'esempio precedente, se testObj non richiede alcun membro di Iface2, è possibile dichiararlo nel modo seguente:
Dim testObj As Iface1-oppure-
Implementare l'interfaccia che eredita in una classe. È quindi possibile implementare ciascuna delle proprietà ereditate con nomi diversi. Solo una di tali proprietà, tuttavia, può essere specificata come proprietà predefinita della classe di implementazione. Nell'esempio riportato di seguito viene illustrata questa situazione.
Public Class useIface3 Implements Iface3 Default Public Property prop1(ByVal arg As Integer) As Integer Implements Iface1.prop ' Insert code to define Get and Set procedures for prop1. End Property Public Property prop2(ByVal arg As Integer) As Integer Implements Iface2.prop ' Insert code to define Get and Set procedures for prop2. End Property End Class