VB.NETでも名前空間に別名を付けたい
別名
VB.NETは(無論C#もですよ)名前空間に別名を付けられます。
Imports コンソール = System.Console Imports AAB = ImportAlias.Hoge.AAA Imports BBA = ImportAlias.Hoge.Fuga.BBB Module Module1 Sub Main() Dim bba = New BBA() bba.SubBBB() Dim aab = New AAB() aab.SubAAA() End Sub End Module Namespace Hoge Class AAA Public Sub SubAAA() コンソール.WriteLine("AAA") End Sub End Class Namespace Fuga Class BBB Public Sub SubBBB() コンソール.WriteLine("BBB") End Sub End Class End Namespace End Namespace
Imports ステートメント (.NET 名前空間および型) | Microsoft Docs
文法は
Imports [別名 =] インポートする名前空間
です。
やたらAs
を多用するVBらしくAs
とか使えばよかったのにと思いますが残念ながら=
です。
まとめ
インポートした物に別名をつけるとタイプ量が減らせて便利ですね。 あとはクラス名が同じときにも別名をつければ名前空間で修飾しなくてもいいので便利です。
ここまで書いておいてアレですが、VB.NETの名前空間ってプロジェクトの参照のところの設定で十把一からげにインポートされて終了しているのが多い気がします。*1
個人的にはプロジェクト設定で一括でインポートしてしまうのはコンパイラにとって*2曖昧でない場合はモジュール名を省略できるという正直全くありがたくない機能と合わせて二大VB.NETにおいて名前空間の意味を薄める機能だと思ってます。
といいますのも、ついこの前うっかりMicrosoft.VisualBasic
名前空間で公開されているモジュールに含まれるメソッド名と被る名前のメソッドを他のモジュールで宣言してしまって一括インポートとの合わせ技によりメソッド名がコンパイラ的に一意でなくなり危うく既存のコードの修正が必要になる事態に陥りかけたのです。
別に使うなという訳ではないですが、挙動をある程度理解しないとドツボにハマる素敵仕様はなんとかならんものかとおもいました。