tagCANDY CGI VBレスキュー(花ちゃん) の Visual Basic 2010 用 掲示板(VB.NET 掲示板) [ツリー表示へ]   [Home]
一括表示(VB.NET VB2005)
タイトルクラス内Private変数に外部(?)からアクセスできてしまう
記事No11308
投稿日: 2014/08/22(Fri) 14:38
投稿者まさお
まさお と申します。 宜しくお願い致します。

 WinXP Pro SP3  VB2010 Express SP1 です。


 クラス関数にて自己と同じ型の別インスタンスのPrivate変数に直接アクセスできますか?

 具体的には下記コードにおいて※α s1 は Private なので ※βのように Me からしかアクセスできない、と理解しておりました。
 しかし※γのように自己と同じ型なら別インスタンス内Private変数に直接アクセスできてしまいます。
   ※δ 違う型なら当然ながらコンパイルエラーになります。
 Me と other は別のインスタンスですから、Me という外部から other という別インスタンスのPrivate変数には直接アクセスできない、と思っていました。
 VB6 では※γで「メソッドまたはデータメンバが見つかりません」コンパイルエラーになるのですが、本来『クラス』とは別インスタンスでも同じ型であればPrivate変数に直接アクセスできるものなのでしょうか?

 自分が何かを誤解しているような気がしています。
 ご教授戴きたくお願い致します。

Public Class Hoge
    Public s0 As String
    Private s1 As String '※α

    Public Sub Foo_0()
        s0 = "xyz"
        s1 = "qwe" '※β
    End Sub
    Public Sub Foo_1()
        Dim other As New Hoge
        other.s0 = "123"
        other.s1 = "456" '※γ
    End Sub
    Public Sub Foo_2(ByVal other As Hoge)
        other.s0 = "abc"
        other.s1 = "def" '※γ
    End Sub
    Public Sub Foo_3()
        Dim other As New OtherType
        other.s0 = "123"
        'other.s1 = "456" '※δ
    End Sub
End Class
Public Class OtherType
    Public s0 As String
    Private s1 As String
End Class


以上、宜しくお願い致します。

[ツリー表示へ]
タイトルRe: クラス内Private変数に外部(?)からアクセスできてしまう
記事No11309
投稿日: 2014/08/22(Fri) 14:48
投稿者Hongliang
はい、可能ですね。
Equalsの実装を書くときなんかによくお世話になります。

[ツリー表示へ]
タイトルRe^2: クラス内Private変数に外部(?)からアクセスできてしまう
記事No11310
投稿日: 2014/08/22(Fri) 15:15
投稿者まさお
Hongliang さん、ありがとうございます。

> Equalsの実装を…
>
 実は IComparable(Of Hoge) を実装しようとしました。

    Public Function CompareTo(other As Hoge) As Integer _
            Implements System.IComparable(Of Hoge).CompareTo
        Return Me.s1.CompareTo(other.s1) '※ε
    End Function
とここまで書いて ※ε で「あれ!何で other.s1 に直接アクセスできているんだ?」と疑問(不安)になって質問した次第です。
 これで安心して Release できます。

 ありがとうございました。 

[ツリー表示へ]