@tnknwb

Are you sure you want to delete the question?

If your question is resolved, you may close it.

Leaving a resolved question undeleted may help others!

We hope you find it useful!

[VB.net]アクセシビリティに関して

解決したいこと

VB.netの学習をしています。
クラスの考え方がイマイチ理解できず躓いています。
有識者の方の力をお借りしたいです。

アクセシビリティの問題であるということはなんとなくわかるのですが、
どのように対応したらよいかわかりません。
よろしくお願いいたします。

メインのモジュール

Module Program
    Sub Main(args As String())

        Dim car1 As New Car
        Dim car2 As New Car

        car1.setNumber("東京245 せ 1234")
        car1.setEnergy("95")
        car1.show()
        car2.setNumber("大阪319 く 5678")
        car2.setEnergy("98")
        car2.show()

    End Sub
End Module

クラスモジュール

Public Class Car
    Private number As String
    Private message1 As String = $"車のナンバーは{number}です。"
    Private energy As String
    Private message2 As String = $"ガソリン量は{energy}です。"

    Sub setNumber(strNumber As String)
        number = strNumber
    End Sub

    Sub setEnergy(strEnergy As Integer)
        energy = strEnergy
    End Sub

    Sub show()
        Console.WriteLine(car1.message1())
        Console.WriteLine(car1.message2())
        Console.WriteLine(car2.message1())
        Console.WriteLine(car2.message2())
    End Sub
End Class

エラー一覧

重大度レベル  コード   説明  プロジェクト  ファイル     抑制状態
エラー   BC30451 'car1' は宣言されていません。アクセスできない保護レベルになっています。 ********************************************************************    16  該当なし
エラー   BC30451 'car1' は宣言されていません。アクセスできない保護レベルになっています。 ********************************************************************    17  該当なし
エラー   BC30451 'car2' は宣言されていません。アクセスできない保護レベルになっています。 ********************************************************************    18  該当なし
エラー   BC30451 'car2' は宣言されていません。アクセスできない保護レベルになっています。 ********************************************************************    19  該当なし
0 likes

1Answer

VBを知らずに書くことをお許しください。

  • car1car2も、定義されたMainの中にあるので、Carからはアクセスすることができません。
    • 基本的に、クラスの中では、クラスの中で定義した、クラスのメンバーを使います。
  • car1car2は、クラスCarのインスタンスです。
    • それらは、雛形であるCarから作られた実態です。
  • Maincar1.show()が実行されると、クラスCarのメンバーのメソッドshow()が呼び出されます。
    • そのとき、show()の中でmessage1を使うと、car1.message1が使われます。
  • car2.show()を実行したときには、message1は、car2.message1のことになります。

show()を以下のように変更すると改善されると思います。

Main
Module Program
    Sub Main(args As String())

        Dim car1 As New Car
        Dim car2 As New Car

        car1.setNumber("東京245 せ 1234")
        car1.setEnergy("95")
        car1.show()
        car2.setNumber("大阪319 く 5678")
        car2.setEnergy("98")
        car2.show()

    End Sub
End Module
Car
Public Class Car
    Private number As String
    Private message1 As String = $"車のナンバーは{number}です。"
    Private energy As String
    Private message2 As String = $"ガソリン量は{energy}です。"

    Sub setNumber(strNumber As String)
        number = strNumber
    End Sub

    Sub setEnergy(strEnergy As Integer)
        energy = strEnergy
    End Sub

    Sub show()
        Console.WriteLine(message1())
        Console.WriteLine(message2())
    End Sub
End Class
0Like

Your answer might help someone💌