Default プロパティ アクセスは、インターフェイス '<interfacename1>' の継承インターフェイス メンバ '<defaultpropertyname>' とインターフェイス '<interfacename2>' の '<defaultpropertyname>' との間で不適切です。

更新 : 2007 年 11 月

インターフェイスが、2 つのインターフェイスを継承しており、継承元の各インターフェイスで既定のプロパティが同じ名前で宣言されています。修飾子を付けないと、この既定のプロパティに対するアクセスをコンパイラが解決できません。次に例を示します。

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) と指定した場合、コンパイラは既定のプロパティに解決しようとします。しかし、継承しているインターフェイスが原因で、既定のプロパティとして 2 つの可能性が生じます。その結果、コンパイラからこのエラーが示されます。

Error ID: BC30686

このエラーを解決するには

  • 同じ名前のメンバを継承しないようにします。上の例で testObj が、たとえば Iface2 のメンバである必要がない場合、次のように宣言します。

            Dim testObj As Iface1
    

    または

  • 継承しているインターフェイスをクラス内で実装します。こうすると、継承したプロパティを別々の名前で実装できます。ただし、実装したクラスで既定のプロパティにすることができるのは、そのうちの 1 つだけです。次に例を示します。

    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
    

参照

概念

インターフェイスの概要

既定のプロパティ