プログラミングマガジン

プログラミングを中心にIT技術をできるだけわかりやすくまとめます。

  • ホーム
  • マイクロソフト系技術
  • 【Visual Basic】「クラス」、「Meキーワード」、「継承」、「Shared」、「…
 
 
     
  • サーバー言語  
    • Python
    • Ruby
    • PHP
    • SQL
  •  
  • インフラ  
       
    • AWS
    •  
    • 基本
    • Git
  • Web
       
    • Web開発
    • JavaScript
    • Vue.js
    • React
  •  
  • 設計  
       
    • 実装設計
    • DB設計
  • 問い合わせ
  

【Visual Basic】「クラス」、「Meキーワード」、「継承」、「Shared」、「構造体」

01.14

  • miyabisan2
  • コメントを書く

この記事は3分で読めます

クラスの構成要素

クラスには下記のようなメンバと呼ばれる構成要素で作成することになります。

  • フィールド
  • プロパティ
  • メソッド

フィールドとは?

クラス内で使用する変数のことです。

通常は、アクセス修飾子として、Privateを使用して直接アクセスをさせないようにします。

例文

1
Private _name As String

プロパティとは?

クラスの中に定義する物で、値の保存や取り出しを行うことができます。Javaでいうところのカプセル化に近い概念になります。

変数と同じと思われるかもしれませんが、実際は、プロパティ自身に値が保存されるのではなく、プロパティを介してフィールドにデータを保存したり取り出しを行ったりすることができるのです。

プロパティの構文

1
2
3
4
5
6
7
8
9
10
11
Public Property プロパティ名() As String
    'ゲッターメソッド
    Get
        Return データが保存されているフィールド
    End Get
 
    'セッターメソッド
    Set(ByVal name As String)
        フィールドにデータを保存する処理
    End Set
End Property

自動実装プロパティ

GetやSetを使用して、フィールドの値を保存したり、取り出したりするのは大変ですね。なので、Visual Basic2010からは、「自動実装プロパティ」という文法が実装されました。

1
Public Property プロパティ名 As データ型

これを使えば、Getや、Setをいちいち宣言しなくてもそのように動作してくれるので実装が楽になりました。

メソッドとは?

クラスの動作や振る舞いを示します。

コンストラクタについて

引数なしのコンストラクタ及び、引数付きのコンストラクタをオーバーロードしてそれぞれ定義することができます。

引数無しのコンストラクタ

1
2
3
Public Sub New()
    _name = "太郎"
End Sub

引数付きのコンストラクタ

1
2
3
4
'コンストラクタ1
Public Sub New(name As String)
    _name = name
End Sub

Meキーワードとは?

クラス内で、Meと使った場合はそのクラスをインスタンス化した場合の自身(実際は、継承先まで含めた末端のクラス)を示します。

Javaでいうところのthisと同じです。

Formクラスであれば、Form自信を示します。

MyClass、MyBaseとの違いは?

MyClass

クラス自身を示します。

MyBase

継承元のクラスを示します。

クラスの継承について

Visual Basicにも継承があり下記のように分かれます。

  • 基本クラス
  • 派生クラス

基本クラス

ベースとなるクラスです。

派生クラス

「基本クラス」を継承して再定義したクラスのことです。

隠蔽

Visual Basicの継承では普通に継承しただけでは、継承元の基本クラスのメンバにアクセスできてしまいます。

基本クラスのメンバにアクセスさせないようにするためには下記二つのどちらかの方法をとります。

  • Shadowsキーワード
  • Overridesキーワード

Shadow

これをつけてメソッドを上書した場合は、継承元の同じ名前のメソッドにアクセスすることができなくなります。

Overrides

メンバの上書を許可します。

Sharedとは?

プロシージャや、ファンクション、フィールド等につけることができ、アプリ全体で共通で利用できるようにするための宣言です。アプリケーションの起動から終了まで寿命を持たせることができます。

また、フィールドが属しているクラスをnewでインスタンスすることなく使うことができます。

1
2
3
4
5
6
7
8
Public Class Person
    Public Shared name As String
End Class
 
Sub Main()
    'いきなり呼べる。
    Person.a = "三郎"
End Sub

構造体とは?

Visual Basicにおいてクラスと同様にデータをひとまとめにして保持しておくことができる構造体という機能があります。

クラスとの違いは?

構造体は、クラスと違ってデータ型が「値型」になります。クラスは「参照型」になります。

構造体とクラスの使い分け

構造体を使った方がよい場合

構造体は、値型なので、スタックメモリに直接値を書き込むので代入処理が高速です。ただ、反対にコピー処理がデータの数が増えれば増えるほど低速になってしまうので、データが多い場合は構造体の利用は避けましょう。ただ、データ量が少ない集まりの場合はクラスよりも良い働きをするでしょう。

クラスを使った方がよい場合

クラスは、参照型なので、ヒープメモリにデータを書き込むので、コピー処理が高速に動作します。値の代入は構造体に比べて低速ですが、データの数が多い場合はデータが代入されているアドレスのコピーだけで済むので非常に高速に動作します。

コレクションの種類

Visual Basicにもデータを効率よく扱うためのコレクションクラスがあります。

コレクション 説明
List 同じデータ型の値を複数管理できる。
SortedList 複数データを並び替えて管理できる。
Stack 先入後だしで管理
Queue 先入れ先出しで管理
Dictionary データをキーと値で管理

LINQ

LINQとは「Language Integrated Query」(統合言語クエリ)の略で、たくさんのデータ集合から任意のデータを取り出すフレームワークのことです。

LINQのメリット

LINQを導入する以前は、データベースならSQL、XMLならXPath等、それぞれ扱いたいデータごとに問い合わせをするための個別の言語を学ばなければなりませんでした。しかし、それらを統合する目的で作られたのがLINQだったのです。

データソース

LINQでは、データの集まりのことをデータソースと呼んでいます。

例えば、データベースや、XMLドキュメント等がこのデータソースに該当します。

LINQプロバイダ

データソースごとに準備をされていて、LINQで記述された問い合わせを各プロバイダに渡して操作をすることができます。

プロバイダ名 問い合わせ先
LINQ to SQL データベース
LINQ to XML XML
LINQ to Objects 配列、コレクション等

 

スポンサーリンク
  • 2019 01.14
  • miyabisan2
  • コメントを書く
  • マイクロソフト系技術
  • Tweets Twitter
  • このエントリーをはてなブックマークに追加
  • LINEで送る

関連記事

  1. 2019 01.09

    【VB.NET/C#】「イベント」について

  2. 2019 01.14

    【Visual Studio】「スレッド」について

  3. 2019 06.16

    【C#】データセット(DataSet)の基本

  4. 2019 01.09

    【VB.NET】「デリゲート」について

  5. 2019 06.29

    【VB.NET】DLLの作り方(Visual Studio 2017にて)

  6. 2018 06.01

    【PowerShell】デバッグをするには?(Windows PowerShell ISEの使用)

  • コメント ( 0 )
  • トラックバック ( 0 )
  1. この記事へのコメントはありません。

  1. この記事へのトラックバックはありません。

返信をキャンセルする。

【VB.NET/C#】「イベント」について

【Visual Studio】「スレッド」について

RETURN TOP

著者プロフィール

エンジニア歴10年で過去に業務系、Webデザイン、インフラ系なども経験あります。現在はWeb系でフロントエンド開発中心です。

詳細なプロフィールはこちら

スポンサーリンク

カテゴリー

  • Android
  • AngularJS
  • API
  • AWS
  • C++
  • CSS
  • cursor
  • C言語
  • DDD
  • DevOps
  • Django
  • Docker
  • Figma
  • Git
  • GitLab
  • GraphQL
  • gRPC
  • Hasura
  • Java
  • JavaScript
  • Kubernetes
  • Laravel
  • linux
  • MySQL
  • Next.js
  • nginx
  • Node.js
  • NoSQL
  • Nuxt.js
  • Oracle
  • PHP
  • Python
  • React
  • Redux
  • Rspec
  • Ruby
  • Ruby on Rails
  • Sass
  • Spring Framework
  • SQL
  • TypeScript
  • Unity
  • Vue.js
  • Webサービス開発
  • Webデザイン
  • Web技術
  • インフラ
  • オブジェクト指向
  • システム開発
  • セキュリティ
  • その他
  • データベース
  • デザインパターン
  • テスト
  • ネットワーク
  • プログラミング全般
  • マイクロサービス
  • マイクロソフト系技術
  • マルチメディア
  • リファクタリング
  • 副業
  • 未分類
  • 業務知識
  • 生成AI
  • 設計
  • 関数型言語
RETURN TOP

Copyright ©  プログラミングマガジン | プライバシーポリシー