Interfaceの実装なんだけども。
Public Interface 受け
WriteOnly Property なにか() As Object
End Interface
Public Interface 攻め
ReadOnly Property なにか() As Object
End Interface
があったとき、この両方を実装するクラスで
Property なにか() As Object Implements ここになんてかけばいいの???
しばし悩んでおりました。
Public Class 両刀
Implements 受け, 攻め
Public Property なにか() As Object Implements 攻め.なにか, 受け.なにか
Get
Console.WriteLine("や ら な い か ?")
Return Nothing
End Get
Set(ByVal value As Object)
Console.WriteLine("アッーーー!")
End Set
End Property
End Class
?error BC30154: Class '両刀' は、インターフェイス '受け' に対して 'WriteOnly Property なにか() As Object' を実装しなければなりません。プロパティの実装には、一致する 'ReadOnly' または 'WriteOnly' 指定子が必要です。
?error BC30154: Class '両刀' は、インターフェイス '攻め' に対して 'ReadOnly Property なにか() As Object' を実装しなければなりません。プロパティの実装には、一致する 'ReadOnly' または 'WriteOnly' 指定子が必要です。
?error BC30401: 'なにか' で 'なにか' を実装できません。インターフェイス '攻め' に、対応する property がありません。
?error BC30401: 'なにか' で 'なにか' を実装できません。インターフェイス '受け' に、対応する property がありません。
んーむ... いろいろいぢくりまわして...
どうやら ReadOnly と WriteOnly のふたつの なにか() を書けばいいらしい。
Public Interface 受け
WriteOnly Property なにか() As Object
End Interface
Public Interface 攻め
ReadOnly Property なにか() As Object
End Interface
Public Class 両刀
Implements 受け, 攻め
Public ReadOnly Property なにか() As Object Implements 攻め.なにか
Get
Console.WriteLine("や ら な い か ?")
Return Nothing
End Get
End Property
Public WriteOnly Property なにか() As Object Implements 受け.なにか
Set(ByVal value As Object)
Console.WriteLine("アッーーー!")
End Set
End Property
End Class
Module Program
Sub Main()
Dim あたし As 受け = New 両刀()
Dim あなた As 攻め = New 両刀()
あたし.なにか = あなた.なにか
End Sub
End Module
※ サンプルコードのわかりやすさには定評あります♪
[追記]?プロパティ?なにか() が重複するとのご指摘を受けました。
ここに訂正してお詫び申し上げます。
Namespace BL
Public Interface 受け
WriteOnly Property なにか() As Object
End Interface
Public Interface 攻め
ReadOnly Property なにか() As Object
End Interface
Public Interface リバも可
Inherits 受け, 攻め
End Interface
Public Class 鬼畜
Implements リバも可
Public ReadOnly Property 凸() As Object Implements 攻め.なにか
Get
Console.WriteLine("や ら な い か ?")
Return Nothing
End Get
End Property
Public WriteOnly Property 凹() As Object Implements 受け.なにか
Set(ByVal value As Object)
Console.WriteLine("アッーーー!")
End Set
End Property
End Class
End Namespace
Module 放課後の教室
Sub Main()
Dim 僕 As BL.受け = New BL.鬼畜()
Dim 君 As BL.攻め = New BL.鬼畜()
僕.なにか = 君.なにか
End Sub
End Module