При доступе к свойству по умолчанию возникает неоднозначность между членами наследуемых интерфейсов: <имяСвойстваПоУмолчанию> интерфейса <имяИнтерфейса1> и <имяСвойстваПоУмолчанию> интерфейса <имяИнтерфейса2>
Обновлен: Ноябрь 2007
Default property access is ambiguous between the inherited interface members '<defaultpropertyname>' of interface '<interfacename1>' and '<defaultpropertyname>' of interface '<interfacename2>'
Интерфейс наследуется из двух интерфейсов, каждый из которых объявляет свойство по умолчанию с тем же именем. Компилятор не может разрешить доступ к этому свойству по умолчанию без уточнения. Это показано в приведенном ниже примере.
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
При указании testObj(1) компилятор пытается разрешить его свойства по умолчанию. Однако есть два возможных свойства по умолчанию, наследуемые из интерфейсов, поэтому компилятор создает эту ошибку.
Идентификатор ошибки: BC30686
Исправление этой ошибки
Следует избегать наследования элементов с одинаковыми именами. В предыдущем примере, если для testObj не требуется ни один из элементов из, например, Iface2, то он затем объявляется следующим образом:
Dim testObj As Iface1
или
Реализуйте наследуемый интерфейс в классе. Затем можно реализовать все наследуемые свойства с различными именами. Однако свойством по умолчанию в реализации класса может быть только одно из них. Это показано в приведенном ниже примере.
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