Privateアクセス修飾子を適用できます(下記リスト8行目を参照)。
1 Interface IHoge
2 Sub method()
3 End Interface
4
5 Class Foo
6 Implements IHoge
7
8 Private Sub method() Implements IHoge.method
9 Debug.WriteLine(”call method()”)
10 End Sub
11 End Class
12
13 Module Module1
14 Sub Main()
15 Dim obj As New Foo
16 ’obj.method() ’ Privateアクセスのため呼び出せない
17 Dim iobj As IHoge = New Foo
18 iobj.method() ’インターフェイス経由ならアクセス可
19 End Sub
20 End Module
私のJavaの経験上、これは非常に不自然に感じます。
VB.NETでは、このようにできる仕様に何の意味があるのか、
どのようなとき役に立つのか、教えてください。
http://ruffnex.oc.to/ipusiron/cgi/forum/patio.cgi
質問掲示板@Security Akademeia
ここと、
ここに、いけば、大体わかると思いますよ
ペコリ(o_ _)o))
http://msdn2.microsoft.com/ja-jp/library/7z6hzchx.aspx
Implements ステートメント
MSDN(2.0)には、
クラスは、プロパティおよびプロシージャを Private (Visual Basic) で実装できますが、そうするとクラスのインスタンスをインターフェイスの型で宣言した変数にキャストしない限り、これらのメンバにアクセスできなくなります。
と書かれています。一応アクセスできるのでアリかな?
まあ普通使うことは無いと思うけど
http://www.microsoft.com/japan/msdn/library/ja/vblr7/html/vastmI...
Implements ステートメント
MSDN(1.0,1.1)にはこう書かれています、
インターフェイスを実装するときは、インターフェイスで宣言されたメンバをすべて実装する必要があります。メンバのいずれかを省略すると、構文エラーと見なされます。クラスは、プロパティおよびメソッドの Private 実装を使用できますが、これらのメンバにアクセスするには、実装元クラスのインスタンスをインターフェイスの型で宣言した変数にキャストする以外に方法はありません。
なるほど。VB.NETのMSDNにも明確な答えがないのですね
(あるのは仕様説明のみ)。
自己レスになりますが、本機能はC#適に言うと、
「インターフェイス メンバの明示的実装」と言うみたいです。
http://www.microsoft.com/japan/msdn/library/default.asp?url=...
>場合によっては、インターフェイス メンバの名前が、
>インターフェイス メンバを実装するクラスに適していないことがあります。
>そのような場合は、インターフェイス メンバの明示的実装を使用して
>インターフェイス メンバを実装できます。
つまり、インターフェイスのメソッドを実装するのにコーディングが
少なくて済むクラスが存在するのだけれど、そのクラスの意味的に
そのメソッドが存在するのは違和感がある場合、クラスとして
そのメソッドが使えないようにPrivateするってことでしょうか。