2

他のプロジェクトにサービスを提供するプロジェクトが1つあり、このサービスを提供するメソッドの戻り値はStringです。そのプロジェクト内で、いくつかの名前付き定数を使用して、予期されるエラーまたは回復可能なエラーの代わりに返される特別な帯域外値を表します。それ以外の場合、サービスはXML文字列を返します。

次のようなもの:

' modService.bas
const SERVICE_BADARG as String = "Unsupported argument."
const SERVICE_TOOMANY as String = "Too many Foos."

' cServiceProvider.cls
Private Function GetXMLString() as String
' generate and return XML string holding all sorts of generic stuff
End Function

Public Function PerformService(argument as String) as String
' do some stuff
If (some_condition = true) Then
    PerformService = SERVICE_BADARG
Else If (some_other_condition = true) Then
    PerformService = SERVICE_TOOMANY
Else
    PerformService = GetXMLString()

他のプロジェクトから、これらの定数を冗長に定義することなく取得できるようにしたいと思います。可能であれば、それらをクラスに配置すること(不必要に複製される場所)を避け、それぞれにプロパティを作成することも避けたいと思います。

それらはすべて定数であり、変更されることはありません。

4

3 に答える 3

2

CONSTANTS.BASモジュールで定数を定義し、それを各プロジェクトに含めてみませんか?そうすれば、VBには定義が複製されたように見えますが、開発者および保守プログラマーとしての観点からは、定義はすべて1か所に集められますか?

別のオプションは、定数を定義するDLLを作成することですが、オブジェクトコードに直接コンパイルするのではなく、呼び出しから取得する必要があるため、すべてのコードでこれらの定数の値を使用するとコストが高くなります。外部DLLに。それは本当に一定している何かにとってはやり過ぎのようです。

「定数」の値は、必ずしも「読み取り専用」の値と同じではないことを考慮してください。piのような定数値は決して変更されないため、これらの値を複製しても失われることはほとんどありません。戻って変更する必要はありません。読み取り専用の値(エラーメッセージ文字列など)は変更される可能性があるため、実際には定数ではありません。それらをDLLに配置することは理にかなっているかもしれません。特に、実行しようとしていることすべてにエラーメッセージが表示された場合、パフォーマンスはそれほど重要ではないためです。

于 2012-07-24T00:00:38.910 に答える
1

残念ながら、VBには、コンパイル時に使用するために定数をDLLに埋め込むメカニズムはありません。あなたがしたくないと言ったように、あなたはプロパティを返さなければならないでしょう。

理由がない限り、私は間違いなくBASルートを使用します。これに代わる方法は、型ライブラリを作成し、そこに文字列定数を定義することです。これを行うには、ODLを学習し、VB6に付属のMkTypeLib.exeプログラムを使用する必要があります。または、MattCurlandによる「AdvancedVisualBasic 6.0」にアクセスできる場合は、タイプライブラリを作成できるツールがあります。

于 2012-07-24T08:03:18.473 に答える
0

私はこれが古いことを知っていますが、誰かがまだ疑問に思っている場合は...このパターンを試してください:

Public Function SERVICE_BADARG() As String
    SERVICE_BADARG = "Unsupported argument."
End Function
Public Function SERVICE_TOOMANY() As String
    SERVICE_TOOMANY = "Too many Foos."
End Function

または、コロンを使用してよりコンパクトに、同じ行にデータを配置します。

Public Function SERVICE_BADARG() As String: SERVICE_BADARG = "Unsupported argument.": End Function
Public Function SERVICE_TOOMANY() As String: SERVICE_TOOMANY = "Too many Foos.": End Function

定数は引数のない関数として見ることができます。利点は、関数をパブリックにできるため、DLLを作成する必要がないことです。また、他の関数の前にそれらを宣言することしかできないことも回避します。VB6では、角かっこを非表示にできます。

x = "error: " & SERVICE_TOOMANY

Select Case y
    Case SERVICE_BADARG
        z = "error: y is a bad arg"
    Case SERVICE_TOOMANY
        z = "error: y is too many"
End Select

欠点は少しオーバーヘッドですが、これは通常無視できます

于 2017-08-24T11:05:28.527 に答える