L'accesso a una proprietà predefinita è ambiguo tra i membri di interfaccia ereditati '<nomeproprietàpredefinita>' dell'interfaccia '<nomeinterfaccia1>' e '<nomeproprietàpredefinita>' dell'interfaccia '<nomeinterfaccia2>'

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
    

Vedere anche

Concetti

Cenni preliminari sulle interfacce

Proprietà predefinite