none
Meキーワードについて RRS feed

  • 質問

  • マイクロソフトのHPを見ても理解しずらいので質問します。

    Public Class  A

      Private  X  As  Integer

    End Class

    Public  Class   B

       Inherits  A

       Private  X  As  Integer

       Public  Sub  Bsub()

          Dim  X  As  Integer

          X= 1

          Me.X= 2 

       End  Sub

    End  Class

    この場合の動きを説明してください。


    • 編集済み 星 睦美 2015年4月23日 0:19 タイトル
    2015年4月22日 23:34

回答

  • Bsub()内の Dim  X  As  Integer ですが、そもそもDimキーワードの意味がわかりません(省略可?)。HPでは、アクセス修飾子の省略時はPublicになるとありますが、Class B 内のPrivate X As Integerとぶつかりませんか。Meキーワードで親クラスのPrivateメンバー

    を参照できるとのことですが、親クラスのブロック内のPrivateメンバーを参照できますか。 

    Dimは元々は配列を宣言する時に使用されていました。Dimentionsの略のはずです。それが、配列でない変数を宣言する時にも使われるようになったものです。
    ですから、省略せずに書くと以下のようになります。

    Dim Private X As Integer

    Privateなどのアクセス修飾子がある場合はDimを省略できますから、

    Private X As Integer

    とも書けます。
    また、アクセス修飾子を省略した場合はPrivateと見做されますから、

    Dim X As Integer

    とも書けます。

    >HPでは、アクセス修飾子の省略時はPublicになるとありますが

    と書かれていますが、具体的にはどこのページでしょうか?もし、そう書かれているのであれば、誤っていると思います。
    アクセス修飾子を省略した場合はPrivateになることは以下のページのPrivateの項に書かれています。

    Visual Basic でのアクセス レベル
    https://msdn.microsoft.com/ja-jp/library/76453kax.aspx

    また、Shadowsというキーワードをご存知でしょうか? こちらも省略することができますが、コンパイラがワーニングを出します。この辺りも含めて、以下に記載されている一連のページを一度ご覧下さい。

    宣言された要素の参照
    https://msdn.microsoft.com/ja-jp/library/1z7xfzst(v=vs.90).aspx


    ★良い回答には回答済みマークを付けよう! MVP - .NET  http://d.hatena.ne.jp/trapemiya/

    • 回答の候補に設定 accado liao 2015年4月23日 8:39
    • 回答としてマーク 星 睦美 2015年5月8日 0:25
    2015年4月23日 7:36
    モデレータ
    1. Dim は、変数宣言のためのキーワードです。基本的にはローカル変数のために使うものです。
      • Dim をフィールド変数の宣言に使えなくも無いのですが、Private Dim X As Integer などと書いても、VB はその Dim を自動削除し、「Private X As Integer」の構文に書き換えてしまいます。
    2. 「Private」「Friend」「Protected」「Protected Friend」「Public」はアクセス修飾子と呼ばれるもので、「スコープ」を指し示すためのキーワードです。
      • 慣れないうちは、基本的にはPrivateを優先して使うようにし、他のクラスとの連携が必要な場合にのみ Public に広げるのが良いでしょう。
    3. フィールド変数の宣言時に、アクセス修飾子を書かない「Dim X As Integer」といった記述を書くこともできますが、フィールド変数では Private や Public などを明示した記述の方が望ましいです。
      • Class や Module の中で、フィールド変数(あるいは定数)のアクセス修飾子を省略した場合は、Private 相当になります。
      • Structure の中で、フィールド変数(あるいは定数)のアクセス修飾子を省略した場合は、Public 相当になります。
        • ただし、その Structureのスコープが Public よりも狭い場合、同等のアクセスレベルまで制限されます。
    4. メソッド(Sub や Function)の宣言時にも、アクセス修飾子(Private や Public)を付与できます。※Interface 内は除く
      • Class や Structure の中で、メソッドのアクセス修飾子を省略した場合は、Private 相当となります。
      • Module の中で、メソッドのアクセス修飾子を省略した場合は、Public 相当となります。
        • ただし Module のアクセスレベルが Friend だった場合は、たとえ Public Sub と書いても Friend 相当に制限されます。
    5. クラス(Class)、構造体(Structure)、列挙型(Enum)、モジュール(Module)の宣言時にも、アクセス修飾子を付与できます。アクセス修飾子を省略した場合、その型は Friend 相当になります。
      • Module に付与できるアクセス修飾子は Public と Friend のみです。
        • Module は名前空間の直下でのみ宣言できます。他の型の中に入れ子で宣言することは出来ません。
      • Class にはすべてのアクセス修飾子を指定できます。
        • 名前空間直下で宣言されたクラスは、Private にできません。
      • Structure および Enum に付与できるアクセス修飾子は Public、Friend、Private のみです。
        • Protected および Protected Friend は指定できません。
        • 名前空間直下で宣言された場合は Private にできません。

    以下蛇足:

    trapemiya さんも書いて下さっていますが、Dim の名の由来は、「次元」を意味する英単語 dimension です。Visual Basic の元となった「BASIC 言語」においては、変数を明示的に宣言するための構文はありませんでした(今のVBで言うところの Option Explicit Off モードでの動作です)。その当時、『配列』を用意するために使われていたのが DIM ステートメントです。BASIC の後継となる QuickBASIC では、その DIM が配列宣言だけではなく変数宣言にも使われるようになり、現在の Visul Basic もそれを踏襲しています。

    2015年4月23日 9:56
  • 「継承元クラス」「自クラス」「ローカル変数」それぞれで、変数名 X が競合している状態ですね。
    この状態で『Me.X』と書いた場合、それは自クラスのフィールド変数 Private X As Integer へのアクセスとみなされます。

    もう少し細かく書くと――


    Bsub内で 「Me.X」と書いた場合、以下の動作を意味します。

    • 『Me.X』とは、「自クラス B の持つメンバー X」もしくは「継承元クラスAの持つメンバー X」を意味します。
      • A と B 両方に X が定義されていた場合、「自クラスBの持つメンバー X」が優先されます。
        • すなわち今回のケースでは、『Me.X』とは、Bクラスの X フィールドを意味することになります。
      • A と B 両方に X が定義されていた時に、A 側の X にアクセスしたい場合には『MyBase.X』という構文を使います。
      • ただし今回の場合、A の X は Private スコープのため、そもそも Bsub 内から A の X にアクセスすることはできないため、この競合は発生していません。(A 側で Private 以外のスコープであった場合には、上記の方法で Bsub 内から読み書きできます)
    • Me.X の構文を使って、ローカル変数 Dim X As Integer へアクセスすることは出来ません。ローカル変数やメソッド引数などは、何某.X の構文ではなく、単に『X』とのみ記述することでアクセスします。
    • 単に『X』とだけ記述した場合、「自クラスBの持つメンバー X」もしくは「継承元クラス Aの持つメンバー X」あるいは「ローカル変数やメソッド引数の X」のいずれの意味にもなりえます。
      • ローカル変数やメソッド引数にて X が存在していた場合は、それが優先的に指し示されます。
      • ローカル変数に X が無かった場合、『X』と書いた場合は B 自身のメンバーX もしくは 継承元A クラスのメンバーX を指し示します。
        • A と B の両方で X が用意されていた場合は、 B 自身のものが優先されます。
      • 意図的に呼び分けたい場合は、「ローカル変数なら『X』」、「自クラスのメンバーなら『Me.X』」、「継承元クラスのメンバーなら『MyBase.X』」と記述します。
    2015年4月23日 0:55
  • Mr. MK4481 さま よろしく。

    変数とスコープの件についてのご質問と考えました。
    vb.net 変数 で Internet 検索されれば、幾つか、分り易いものが見付かります。

    ブロックと変数のスコープ  smdn
    http://smdn.jp/programming/vb.net/block_scope/

    第8回 もっと変数 Visual Basic 中学校 初級講座
    http://homepage1.nifty.com/rucio/main/dotnet/shokyu/standard8.htm

    ローカル変数などで 変数の有効範囲を考えれば、理解し易いかもです。
    2015年4月23日 2:49
  • Hoshinaです
    こんにちは

    こうした質問・疑問は文字によるフォーラムでは伝達が難しいものと思います。

    学習方法は、以下の順でお勧めします。
    ・知識経験の豊富な師匠を見つけて、弟子入りする
    ・自分のレベルにあった書物を手に入れる

    さて、再度の質問に関してですが、「Dimキーワードの意味」以外の項目に関して、魔界の仮面弁士さんの投稿に既に解答されていると思います。もう一度落ち着いて読み直されることをお勧めします。

    >Class B 内のPrivate X As Integerとぶつかりませんか。
    はい、ぶつかります。
    その場合のルールは、魔界の仮面弁士さんが書かれています。

    >Meキーワードで親クラスの
    いいえ、Meは自分自身のクラスです。親クラスはMyBaseです。
    この件も、魔界の仮面弁士さんが書かれています。

    >親クラスのブロック内のPrivateメンバーを参照できますか。
    いいえ、参照できません。
    また、「プロック内の」という言葉はうまい言葉ではないと思いますので、頭の中で削除した上で考えた方が良いと思います。
    そしてこの件も、魔界の仮面弁士さんが書かれています。

    もう一度、魔界の仮面弁士さんの投稿を読まれてはいかがでしょうか。
    それでは

    2015年4月23日 6:12

すべての返信

  • 「継承元クラス」「自クラス」「ローカル変数」それぞれで、変数名 X が競合している状態ですね。
    この状態で『Me.X』と書いた場合、それは自クラスのフィールド変数 Private X As Integer へのアクセスとみなされます。

    もう少し細かく書くと――


    Bsub内で 「Me.X」と書いた場合、以下の動作を意味します。

    • 『Me.X』とは、「自クラス B の持つメンバー X」もしくは「継承元クラスAの持つメンバー X」を意味します。
      • A と B 両方に X が定義されていた場合、「自クラスBの持つメンバー X」が優先されます。
        • すなわち今回のケースでは、『Me.X』とは、Bクラスの X フィールドを意味することになります。
      • A と B 両方に X が定義されていた時に、A 側の X にアクセスしたい場合には『MyBase.X』という構文を使います。
      • ただし今回の場合、A の X は Private スコープのため、そもそも Bsub 内から A の X にアクセスすることはできないため、この競合は発生していません。(A 側で Private 以外のスコープであった場合には、上記の方法で Bsub 内から読み書きできます)
    • Me.X の構文を使って、ローカル変数 Dim X As Integer へアクセスすることは出来ません。ローカル変数やメソッド引数などは、何某.X の構文ではなく、単に『X』とのみ記述することでアクセスします。
    • 単に『X』とだけ記述した場合、「自クラスBの持つメンバー X」もしくは「継承元クラス Aの持つメンバー X」あるいは「ローカル変数やメソッド引数の X」のいずれの意味にもなりえます。
      • ローカル変数やメソッド引数にて X が存在していた場合は、それが優先的に指し示されます。
      • ローカル変数に X が無かった場合、『X』と書いた場合は B 自身のメンバーX もしくは 継承元A クラスのメンバーX を指し示します。
        • A と B の両方で X が用意されていた場合は、 B 自身のものが優先されます。
      • 意図的に呼び分けたい場合は、「ローカル変数なら『X』」、「自クラスのメンバーなら『Me.X』」、「継承元クラスのメンバーなら『MyBase.X』」と記述します。
    2015年4月23日 0:55
  • Mr. MK4481 さま よろしく。

    変数とスコープの件についてのご質問と考えました。
    vb.net 変数 で Internet 検索されれば、幾つか、分り易いものが見付かります。

    ブロックと変数のスコープ  smdn
    http://smdn.jp/programming/vb.net/block_scope/

    第8回 もっと変数 Visual Basic 中学校 初級講座
    http://homepage1.nifty.com/rucio/main/dotnet/shokyu/standard8.htm

    ローカル変数などで 変数の有効範囲を考えれば、理解し易いかもです。
    2015年4月23日 2:49
  • Bsub()内の Dim  X  As  Integer ですが、そもそもDimキーワードの意味がわかりません(省略可?)。HPでは、アクセス修飾子の省略時はPublicになるとありますが、Class B 内のPrivate X As Integerとぶつかりませんか。Meキーワードで親クラスのPrivateメンバー

    を参照できるとのことですが、親クラスのブロック内のPrivateメンバーを参照できますか。 

    2015年4月23日 5:45
  • Bsub()内の Dim  X  As  Integer ですが、そもそもDimキーワードの意味がわかりません(省略可?)。

    BSub メソッド内のDimステートメントはローカル変数の宣言用に使われています。上記コード内で宣言された変数 X のスコープ(有効範囲)は BSub メソッド内のみ有効です。


    ぜひ 「フォーラムでご質問頂くにあたっての注意点」 もご覧ください https://social.msdn.microsoft.com/Forums/ja-JP/ca9ecfb7-4407-4fcb-b8bd-207d68257e68?forum=announceja

    2015年4月23日 6:04
    モデレータ
  • Hoshinaです
    こんにちは

    こうした質問・疑問は文字によるフォーラムでは伝達が難しいものと思います。

    学習方法は、以下の順でお勧めします。
    ・知識経験の豊富な師匠を見つけて、弟子入りする
    ・自分のレベルにあった書物を手に入れる

    さて、再度の質問に関してですが、「Dimキーワードの意味」以外の項目に関して、魔界の仮面弁士さんの投稿に既に解答されていると思います。もう一度落ち着いて読み直されることをお勧めします。

    >Class B 内のPrivate X As Integerとぶつかりませんか。
    はい、ぶつかります。
    その場合のルールは、魔界の仮面弁士さんが書かれています。

    >Meキーワードで親クラスの
    いいえ、Meは自分自身のクラスです。親クラスはMyBaseです。
    この件も、魔界の仮面弁士さんが書かれています。

    >親クラスのブロック内のPrivateメンバーを参照できますか。
    いいえ、参照できません。
    また、「プロック内の」という言葉はうまい言葉ではないと思いますので、頭の中で削除した上で考えた方が良いと思います。
    そしてこの件も、魔界の仮面弁士さんが書かれています。

    もう一度、魔界の仮面弁士さんの投稿を読まれてはいかがでしょうか。
    それでは

    2015年4月23日 6:12
  • フォーラム オペレーターの星 睦美です。
    Mr.MK4481 さん、こんにちは。

    質問のなかで、参照のページのURL をご紹介いただくと回答者がアドバイスしやすいのではないかと思います。
    MSDN ライブラリでは「Dim キーワードの意味」などVisual Basic に関連した情報を公開していますのでお役立てください。
    一部ですがご紹介させていただきます。

    ・Visual Basic (https://msdn.microsoft.com/ja-jp/library/2x7h1hfk.aspx )

    Visual Basic の言語リファレンス

    キーワード (Visual Basic)

    Dim ステートメント (Visual Basic)


    フォーラム オペレーター 星 睦美 - MSDN Community Support

    2015年4月23日 6:13
  • あと付言ですが、すでにご自身でクラスのサンプルを掲示されておられるなら、サンプルプログラムを作り、実際の挙動をご自身の環境で確認されることをお勧めします。
    試しにサンプルを書いてみました。何かの参考になれば幸いです。

    Module Module1
        Public Class A
            Private X As Integer
            Public Overridable Function GetX() As Integer
                Return X
            End Function
        End Class
    
        Public Class B
            Inherits A
            Private X As Integer
    
            Public Sub Bsub()
                Dim X As Integer
                X = 1
                Console.WriteLine(X)    ' ローカル変数 X の値「1」を出力
    
                Me.X = 2
                Console.WriteLine(Me.X) ' フィールド X の値「2」を出力
                Console.WriteLine(X)    ' ローカル変数 X の値「1」を出力
            End Sub
    
            Public Overrides Function GetX() As Integer
                Return X                ' フィールド X の値を返却
            End Function
        End Class
    
        Sub Main()
            Dim a = New A()
            Console.WriteLine(a.GetX()) ' クラスA のフィールド X の値「0」を出力
    
            Dim b = New B()
            Console.WriteLine(b.GetX()) ' クラスB のフィールド X の値「0」を出力
    
            b.Bsub()
            Console.WriteLine(b.GetX()) ' クラスB のフィールド X の値「2」を出力
    
            Console.ReadKey()
        End Sub
    End Module


    ぜひ 「フォーラムでご質問頂くにあたっての注意点」 もご覧ください https://social.msdn.microsoft.com/Forums/ja-JP/ca9ecfb7-4407-4fcb-b8bd-207d68257e68?forum=announceja

    2015年4月23日 6:29
    モデレータ
  • コンパイラになったつもりで書きます。  ご質問のコードは、

    公開された(Public)クラスAを作りました。
    局所(Private)変数のXを作りました。 有効範囲はクラス内です。
      他に指令がありませんので、このXには外部からアクセス出来ません。
    公開された(Public)クラスBを作りました。
    クラスAを継承しています。
    局所(Private)変数のXを作りました。 有効範囲はクラス内です。 クラスAのXとは別物です。
    公開されたメソッドBsubを作りました。
    ローカル(Dim)変数のXを作りました。 有効範囲はメソッド内です。 クラスAのXや局所のXとは別物です。
    ローカルのXに代入しました。
    クラスBのXに代入しました。
    メソッドBsubは終わりです。 ローカルのXは消去します。 
      他に指令がありませんので、クラスBのXには外部からアクセス出来ません。

    ぼんくらコンパイラなので、言葉が間違っているかも ... 。
    • 編集済み ShiroYuki_Mot 2015年4月23日 7:42 やっぱり、言葉が違ってた!
    2015年4月23日 7:30
  • Bsub()内の Dim  X  As  Integer ですが、そもそもDimキーワードの意味がわかりません(省略可?)。HPでは、アクセス修飾子の省略時はPublicになるとありますが、Class B 内のPrivate X As Integerとぶつかりませんか。Meキーワードで親クラスのPrivateメンバー

    を参照できるとのことですが、親クラスのブロック内のPrivateメンバーを参照できますか。 

    Dimは元々は配列を宣言する時に使用されていました。Dimentionsの略のはずです。それが、配列でない変数を宣言する時にも使われるようになったものです。
    ですから、省略せずに書くと以下のようになります。

    Dim Private X As Integer

    Privateなどのアクセス修飾子がある場合はDimを省略できますから、

    Private X As Integer

    とも書けます。
    また、アクセス修飾子を省略した場合はPrivateと見做されますから、

    Dim X As Integer

    とも書けます。

    >HPでは、アクセス修飾子の省略時はPublicになるとありますが

    と書かれていますが、具体的にはどこのページでしょうか?もし、そう書かれているのであれば、誤っていると思います。
    アクセス修飾子を省略した場合はPrivateになることは以下のページのPrivateの項に書かれています。

    Visual Basic でのアクセス レベル
    https://msdn.microsoft.com/ja-jp/library/76453kax.aspx

    また、Shadowsというキーワードをご存知でしょうか? こちらも省略することができますが、コンパイラがワーニングを出します。この辺りも含めて、以下に記載されている一連のページを一度ご覧下さい。

    宣言された要素の参照
    https://msdn.microsoft.com/ja-jp/library/1z7xfzst(v=vs.90).aspx


    ★良い回答には回答済みマークを付けよう! MVP - .NET  http://d.hatena.ne.jp/trapemiya/

    • 回答の候補に設定 accado liao 2015年4月23日 8:39
    • 回答としてマーク 星 睦美 2015年5月8日 0:25
    2015年4月23日 7:36
    モデレータ
    1. Dim は、変数宣言のためのキーワードです。基本的にはローカル変数のために使うものです。
      • Dim をフィールド変数の宣言に使えなくも無いのですが、Private Dim X As Integer などと書いても、VB はその Dim を自動削除し、「Private X As Integer」の構文に書き換えてしまいます。
    2. 「Private」「Friend」「Protected」「Protected Friend」「Public」はアクセス修飾子と呼ばれるもので、「スコープ」を指し示すためのキーワードです。
      • 慣れないうちは、基本的にはPrivateを優先して使うようにし、他のクラスとの連携が必要な場合にのみ Public に広げるのが良いでしょう。
    3. フィールド変数の宣言時に、アクセス修飾子を書かない「Dim X As Integer」といった記述を書くこともできますが、フィールド変数では Private や Public などを明示した記述の方が望ましいです。
      • Class や Module の中で、フィールド変数(あるいは定数)のアクセス修飾子を省略した場合は、Private 相当になります。
      • Structure の中で、フィールド変数(あるいは定数)のアクセス修飾子を省略した場合は、Public 相当になります。
        • ただし、その Structureのスコープが Public よりも狭い場合、同等のアクセスレベルまで制限されます。
    4. メソッド(Sub や Function)の宣言時にも、アクセス修飾子(Private や Public)を付与できます。※Interface 内は除く
      • Class や Structure の中で、メソッドのアクセス修飾子を省略した場合は、Private 相当となります。
      • Module の中で、メソッドのアクセス修飾子を省略した場合は、Public 相当となります。
        • ただし Module のアクセスレベルが Friend だった場合は、たとえ Public Sub と書いても Friend 相当に制限されます。
    5. クラス(Class)、構造体(Structure)、列挙型(Enum)、モジュール(Module)の宣言時にも、アクセス修飾子を付与できます。アクセス修飾子を省略した場合、その型は Friend 相当になります。
      • Module に付与できるアクセス修飾子は Public と Friend のみです。
        • Module は名前空間の直下でのみ宣言できます。他の型の中に入れ子で宣言することは出来ません。
      • Class にはすべてのアクセス修飾子を指定できます。
        • 名前空間直下で宣言されたクラスは、Private にできません。
      • Structure および Enum に付与できるアクセス修飾子は Public、Friend、Private のみです。
        • Protected および Protected Friend は指定できません。
        • 名前空間直下で宣言された場合は Private にできません。

    以下蛇足:

    trapemiya さんも書いて下さっていますが、Dim の名の由来は、「次元」を意味する英単語 dimension です。Visual Basic の元となった「BASIC 言語」においては、変数を明示的に宣言するための構文はありませんでした(今のVBで言うところの Option Explicit Off モードでの動作です)。その当時、『配列』を用意するために使われていたのが DIM ステートメントです。BASIC の後継となる QuickBASIC では、その DIM が配列宣言だけではなく変数宣言にも使われるようになり、現在の Visul Basic もそれを踏襲しています。

    2015年4月23日 9:56
  • アクセスレベルは、既定でPublicに設定されますと、Visual Basicの言語リファレンスのPublic(Visual Basic)の項目に載っています。
    2015年4月23日 10:40
  • そういう環境にありません。いずれ。
    2015年4月23日 10:53
  • Public (Visual Basic) ですね。

    ご質問のコードでは、Private と明示していますから、「特に宣言しなければ、」に反すので該当しませんが ... 。
    でも、確かに、文章づらだけ読んで見ると、誤解を招きかねないですね。

    以下、文章を引用。  アンダーライン追記。

    https://msdn.microsoft.com/ja-jp/library/9dc6we3z.aspx

    アクセスを制限する必要がないプログラミング要素に対しては、パブリック アクセスが通常のアクセス レベルになります。 特に宣言しなければ、インターフェイス、モジュール、クラス、または構造体の内部で宣言された要素のアクセス レベルは、既定で Public に設定されるので注意が必要です。

     
    2015年4月23日 12:38
  • アクセスレベルは、既定でPublicに設定されますと、Visual Basicの言語リファレンスのPublic(Visual Basic)の項目に載っています。

    とは、

    Public (Visual Basic) ですね。

    ご質問のコードでは、Private と明示していますから、「特に宣言しなければ、」に反すので該当しませんが ... 。
    でも、確かに、文章づらだけ読んで見ると、誤解を招きかねないですね。

    以下、文章を引用。  アンダーライン追記。

    https://msdn.microsoft.com/ja-jp/library/9dc6we3z.aspx

    と、ShiroYuki_Motさんがご紹介されているページでよろしいでしょうか? であれば省略されすぎていて、このページは誤解を招きやすいように思います。話の流れから私はDimの既定のアクセスレベルについて書いておりまして、クラス内におけるDimはデフォルトでprivateになります。これは魔界の仮面弁士さんも書かれている通りです。詳しくは以下をご覧下さい。

    宣言コンテキストと既定のアクセス レベル (Visual Basic)
    https://msdn.microsoft.com/ja-jp/library/ms235296(v=vs.120).aspx


    ★良い回答には回答済みマークを付けよう! MVP - .NET  http://d.hatena.ne.jp/trapemiya/

    2015年4月24日 2:09
    モデレータ
  • でも、確かに、文章づらだけ読んで見ると、誤解を招きかねないですね。

    以下、文章を引用。  アンダーライン追記。

    https://msdn.microsoft.com/ja-jp/library/9dc6we3z.aspx

    と、ShiroYuki_Motさんがご紹介されているページでよろしいでしょうか? であれば省略されすぎていて、このページは誤解を招きやすいように思います。話の流れから私はDimの既定のアクセスレベルについて書いておりまして、クラス内におけるDimはデフォルトでprivateになります。これは魔界の仮面弁士さんも書かれている通りです。詳しくは以下をご覧下さい。

    ちょっと補足しておくと、ここに記載されている「public」は、publicアクセスレベルというような意味ではなく、公開されている(制限されない)という意味でpublicと書かれていて、アクセス修飾子の「Public」ではない気がします(元の英語の意味では)。
    2015年4月24日 2:39
  • 私も、ひらぽん さまのご提案に賛成です。

    サンプルを作り、外部からクラスを利用する事で、挙動が掴めますから。
    是非、ご自分で、コードを書いて見て下さい。

    実は、最初の投稿をする前に、ご質問のコードに、
    局所の X に値を代入し Readonly Property を付け加えて、外部クラスから表示させるサンプルを書いていました。
    でも、ご質問者 さまの質問内容とは掛け離れる気がしまして、参照リンクに書き換えました。

    もう一回書いて見ましたので、ご参考まで。 フォームにボタンひとつとラベルふたつ用意して下さい。

    Public Class Form1 Dim a_class As New A Dim b_class As New B Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load GetX_EachClass() End Sub Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click b_class.Bsub() GetX_EachClass() End Sub Private Sub GetX_EachClass() Dim ax As Integer = a_class.GetX Dim bx0 As Integer = b_class.GetX Dim bx1 As Integer = b_class.GetX_a Dim bx2 As Integer = b_class.GetX_b Me.Label1.Text = ax.ToString Me.Label2.Text = bx0.ToString & vbCrLf & bx1.ToString & vbCrLf & bx2.ToString & vbCrLf End Sub End Class Public Class A 'Private X As Integer Private X As Integer = 10 '初期値設定 '以下追加 Public ReadOnly Property GetX() Get GetX = X End Get End Property End Class Public Class B Inherits A 'Private X As Integer Private X As Integer = 20 '初期値設定 Public Sub Bsub() Dim X As Integer X = 1 Me.X = 2 End Sub '以下追加 Public ReadOnly Property GetX_a() Get GetX_a = MyBase.GetX End Get End Property Public ReadOnly Property GetX_b() Get GetX_b = X End Get End Property End Class

    尚、元のコードで 1 を代入した X はこのままでは取得出来ません。 Function の中で代入して返す様な変更が必要になります。


    • 編集済み ShiroYuki_Mot 2015年4月24日 4:37 尚 の分を追加
    2015年4月24日 4:28