こんにちは、いつも拝見させて頂いております。
今回は、VB.NETのEnumについて教えて頂ければと思い、投稿しました。
VB.NETでEnum定義をしているのですが、クラス内のEnumとして定義
しているのですが、そのクラスのインスタンスを生成しなくても
クラス内のEnum定義が参照できます。
クラスのインスタンスを生成していないのであれば、そのクラス内に
あるEnum定義も参照できないのではないかと考えていたのですが、
参照できたので、なぜなのかがわかりません。
自分なりに色々と調べたのですが、EnumがSystem.Enumを継承している
というのはわかりましたが、それがなぜ、クラスのインスタンスを生成
しないで、クラス内のEnum定義が参照できることになるのかがわかりません。
言語は、VB.NET2005です。
一応、ここの質問一覧も検索してみたのですが、該当しそうなもの
が見当たらなかったので、ここに投稿させてもらいました。
お忙しいところ、申し訳ありませんが、ご教授ください。
No.3
- 回答日時:
クラスの中のクラスは,外側のクラスに束縛されません。
ここはJavaと異なるので,Java経験がある場合は注意が必要です。
# Javaでは外側のクラスに束縛されます。
つまり,
Public Class OuterClass
' コード
Public Class InnerClass
' コード
End Class
' コード
End Class
とあった場合に,
Dim obj As New OuterClass.InnerClass
のように,InnerClassに自由にアクセス可能です。
Enumも一種のクラスですから,上記と同様の理由で,外側のクラスのインスタンス化なしに内側のEnumにアクセスできます。
なるほど、C#でやっていたときは、インスタンスを生成したあとで
そのクラス内のEnumを参照するようにしていたので、クラスインスタンス
を生成せずに、Enumを参照できるのがなぜかわかりませんでした。
ご説明戴いた内容でなんとなくですが、理解できました。
ありがとうございました。
No.2
- 回答日時:
回答ありがとうございます。
教えて戴いたページは、私も検索して見つけましたが、VB.NETと
いうよりは、VB6.0の情報だと思ったので、VB.NETとしての
記述のあるページを探しています。
No.1
- 回答日時:
定数項の文字列による置き換えだからではないかと思います
Enum ... End Enum で定義された部分がご質問だとすると
Enumステートメントを調べたほうが良いでしょう
ご質問の内容が
Class oTest
Enum Test
First
Secound
Third
End Enum
Public objEnum1 as Test
Private objEnum2 as Test
end Class
と定義した場合
oTest.Test.First はそのままアクセス可能です
objEnum1やobjEnum2などは oTestのインスタンスが無いとアクセスできません
また objEnum2はPrivateなので oTestクラス内でのみ参照可能です
早速の回答ありがとうございます。
Enumステートメントでネットを検索したら、VBの記述として
Enumのスコープの説明がありましたので、理解できました。
ただ、VB.NETとしてのそういった記述があれば、さらにいいなと
思いますので、もう少し調べてみます。
ありがとうございました。
もし、VB.NETのそういった記述している箇所をご存知でしたら
教えていただけると幸いです。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- その他(プログラミング・Web制作) どういうプログラムで組みますか?google colabでやってるんですけど、出来る方お願いします。 1 2022/07/17 18:41
- C言語・C++・C# C言語初心者 構造体 課題について 2 2023/03/10 19:48
- その他(プログラミング・Web制作) どういうプログラムで組みますか?google colabでやってるんですけど、出来る方お願いします。 1 2022/07/06 09:28
- その他(プログラミング・Web制作) このプログラミングをどう組みますか? Googlecolabでやってるんですが、出来る方お願いします 1 2022/07/13 10:52
- Visual Basic(VBA) VBプロジェクトでのフォルダ構成について 1 2023/07/22 03:49
- Java JavaのSingletonパターンのprivateの持つ意味が分かりません。 5 2022/06/12 10:38
- その他(プログラミング・Web制作) IT初心者です 仕事で、vb.netで作成されたdllをvbaで呼び出すプログラムを作成しろと言われ 1 2023/03/27 08:22
- C言語・C++・C# C# 継承の問題で programに示された拡張をすべて含んだ上で,クラス Mammal に,そのオ 1 2022/07/22 09:48
- その他(悩み相談・人生相談) 将来伸びる高校生って? 1 2022/05/14 14:39
- 成人式 成人式の同窓会が行われることが決定したのですが、中学生で私立受験した友達が僕が卒業した市立中学校の同 3 2022/08/21 15:37
関連するカテゴリからQ&Aを探す
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
C++/CLIからC++の呼び出しで例外
-
既定のコンストラクタがない?
-
System.Net.HttpWebRequest、も...
-
SetTimerの行でアサートエラー...
-
C++ protectedにアクセス不可
-
【ASP.NET】 独自で作成したク...
-
DebugクラスとTraceクラスの違い
-
派生クラスから基本クラスprote...
-
エディットコントロールのイベ...
-
クラスのアドレスを引数として...
-
イベントにAddHandlerされてい...
-
FriendとPublicの違い。。。
-
ダイアログ表示時にチェックボ...
-
"Locstionができなくなりました...
-
.NET Remotingを利用したゲーム...
-
C#でのjsonの扱い方を教えてく...
-
今,C++のコンストラクタを勉...
-
vba sendKeysを送る相手のソフ...
-
正規表現 [^/]+ の意味を教えて
-
for each で扱えるコレクション...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
FriendとPublicの違い。。。
-
既定のコンストラクタがない?
-
(UWSC) 「#32770」の意味わかり...
-
ダイアログ表示時にチェックボ...
-
クラスのアドレスを引数として...
-
C++ protectedにアクセス不可
-
【ASP.NET】 独自で作成したク...
-
MFCアプリのコマンドラインでパ...
-
ダイアログクラスのコントロー...
-
エディットコントロールでEnter...
-
このコンパイルエラーの意味に...
-
CMainFrameクラスの使い方
-
イベントにAddHandlerされてい...
-
MFC モードレスDlgについて
-
MFCのCListCtrlでスクロールを検出
-
privateなメンバ関数をテストす...
-
[MFC] CWnd::MessageBoxの警告...
-
継承を重ねた場合のコストはど...
-
DataGridViewのセルに斜線を引...
-
ボタンのオーナードローについて
おすすめ情報