ognacさんの記事で思い出したお話。
VB6から言語コンバートしたようなシステムでModuleが大きな顔して居座っていたのですが
いわゆる共通Moduleっつうことですべてのプロジェクトにファイルリンクで取り込まれるModuleがありました。
その中に
Public Class xxxException
End Class
があり、
必須参照のDLLプロジェクトに
Public Function yyy() As zzz
Throw New xxxException
End Function
がありました。
でもって、自分の担当のプロジェクトでその関数を使う場面が出てきて
Catch ex As xxxException
と何も考えずに書き、エラーもありませんでした。
で、そこを通るテストをしたとき、あれ?、ん?、なんでー!?、関数はちゃんとThrowしてんのに、なんでぇ?
そうです。xxxExceptionを定義したModuleを全プロジェクトが参照してるので
それぞれが、MyProject.xxxExceptionとCommonProject.xxxExceptionを持ちxxxExceptionは暗黙で内側のMyProject.xxxExceptionとなり
エラーも出ず、実行時には型が不一致でCatchを通らなかったのです。
私:「これ、まずいんじゃないの?」
X:「CommonProject.xxxExceptionと書くとコーディング基準で決まっているようですよ」
あのぉ、いや、わかりました。。。