- - PR -
リンク ファイルとして関連付けを行った型定義の扱いについて
1
投稿者 | 投稿内容 | ||||
---|---|---|---|---|---|
|
投稿日時: 2003-10-28 13:51
すみません、詰まってしまったので教えて下さい。
現在、VB.Netで共通関数集の作成を行っています。 共通関数集は、いくつかの種類によりDLLファイルになるわけですが、 ユーザ型の定義や列挙体については共通で使用するものもあります。 そこで、モジュールファイルに作成した列挙体を、他のクラスライブラリ のプロジェクト内でリンクファイルとして紐付けを行い、クラスモジュール 内で、関数の引数や変数の型定義に使ってみたところ、 関数内の変数の宣言時に使用する事は出来ましたが、クラスモジュール内 のPublic変数の宣言時や、Public関数の引数の型に指定すると、 'enumType' は、Public class 'clsSample' の外にある Friend 型を公開できません。 と、コンパイルエラーになってしまいます。 ( Friend ではなく Public なんですけどね・・) Public変数・関数をPrivate等に変えて宣言すれば、エラーは出ませんが、 共通関数として他のプロジェクトから呼び出す事は出来なくなってしまい ます。 1.リンクで関連付けを行った型定義は、プロジェクトの外に漏らさないという 観点から、型定義が外に漏れない宣言しか行えないのでしょうか? (クラスライブラリ側から見た場合) 2.上記の回避策は、クラスライブラリ側で定義しておいて、他のプロジェクトから 参照設定を行った後に、クラス内部の型で変数・引数の型定義を行うか、同じ型 定義のモジュールファイルを、プロジェクト別に作成して管理するしかないの でしょうか?(これが嫌で上記の事を行いたかったのです) どなたかご教授をお願いします。 ※以下、サンプルソースです '================================================= 'モジュールファイル '(クラスライブラリにリンクファイルとして紐付け) '================================================= Module mdlSample Public Enum numType As Integer INP_CODE 'コード INP_DATE '日付 INP_DECP '小数点含む値 INP_NUMP '整数値 INP_STR '文字型 End Enum End Module '================================================= 'クラスファイル '================================================= Public Class clsSample Public Function cfnc_SampleCheck(pnumType As numType) As Boolean ' ↑これをPrivate等に変えると、エラーは出なくなりますが外部から ' 呼び出せません(当然ですが) Select Case pnumType Case numType.INP_CODE cfnc_SampleCheck = True Case numType.INP_DATE cfnc_SampleCheck = True Case Else cfnc_SampleCheck = False End Select End Function End Class | ||||
|
投稿日時: 2003-10-28 14:14
Enum の部分を Module の外に書いてみてはどうでしょうか?
| ||||
|
投稿日時: 2003-10-28 14:21
'enumType'は'numType'ですよね? モジュールmdlSampleの内部の列挙型numTypeは、 正確には、mdlSample.numTypeという型です。 ModuleもEnumもクラスの一種で、numTypeはmdlSampleの内部クラスです。 で、mdlSample型はアクセス修飾子の指定がないのでFriendスコープです。 その内部クラスのnumTypeはアクセス修飾子にPublicが指定されていますが、 Friendスコープの中でのPublicのため、Friendスコープになりますので、 mdlSample.numType型は他のアセンブリ(EXE、DLL)からは見えません。 単純にnumType型の宣言をmdlSampleの外に出して、 mdlSample.numType型ではなくnumType型とすればよいでしょう。 詳しくは下記のURLのVisualBasic言語仕様、リファレンスをご覧ください。 4.6 アクセスの種類 http://www.microsoft.com/japan/msdn/library/default.asp?url=/japan/msdn/library/ja/vbls7/html/vblrfVBSpec4_5.asp Module ステートメント http://www.microsoft.com/japan/msdn/library/default.asp?url=/japan/msdn/library/ja/vblr7/html/vakeymodule.asp | ||||
|
投稿日時: 2003-10-28 14:36
>>架空兎 さま
>>よねKEN さま 有難うございました。 EnumをModuleの外にPublic宣言する事で、綺麗に解決しました。 既存のModule宣言内に書いたのではダメですよね。納得です。 >'enumType'は'numType'ですよね? そうです。失礼しました。 |
1