DOBON.NET DOBON.NETプログラミング掲示板過去ログ

設定ファイルから読込んだ値を定数として使うには…

分類:[.NET]

現在作成しているソフトで現状は、モジュール内にPublic定数を宣言して
配列等に使用しているのですが、設定ファイルから読込んだ値を定数として
配列等に利用したいのですが可能なのでしょうか?
可能であれば教えて下さい。よろしくお願い致します。
> 現在作成しているソフトで現状は、モジュール内にPublic定数を宣言して
> 配列等に使用しているのですが、設定ファイルから読込んだ値を定数として
> 配列等に利用したいのですが可能なのでしょうか?
> 可能であれば教えて下さい。よろしくお願い致します。

新規のクラスを作成し、そのクラスで設定ファイルを読み込み、
そのクラスのReadOnlyプロパティとして値を公開すればよいでしょう。
ReadOnlyプロパティは他のクラスからはその値を変更できません。
■No2070に返信(よねKENさんの記事)
> 新規のクラスを作成し、そのクラスで設定ファイルを読み込み、
> そのクラスのReadOnlyプロパティとして値を公開すればよいでしょう。
> ReadOnlyプロパティは他のクラスからはその値を変更できません。

よねKENさん、ありがとうございます。
クラスを作成してやってみたのですが、やはり「定数式が必要です」とエラーがでます。

現在、以下のようにしています。
Public const gcintMax as Integer = 3

'// 配列の宣言
Private maCount(gcintMax - 1) as Integer
として定数定義を配列の要素数に利用しています。
-------------------------------------------------------------------
やりたいことは、gcintMaxの値を設定ファイルから読込
配列の要素数として利用したいのですが…

Public gcintMax as Integer

gcintMaxに設定ファイルから読込んだ値を代入し配列を宣言

'// 配列の宣言
Private maCount(gcintMax - 1) as Integer

質問の仕方が悪くてすいません。
> 現在、以下のようにしています。
> Public const gcintMax as Integer = 3
>
> '// 配列の宣言
> Private maCount(gcintMax - 1) as Integer
> として定数定義を配列の要素数に利用しています。
> -------------------------------------------------------------------
> やりたいことは、gcintMaxの値を設定ファイルから読込
> 配列の要素数として利用したいのですが…

そういうことでしたか、一度だけ設定できるような定数が欲しい、ということだと思って動的な定数(言い方は変ですが)を扱う方法が質問内容だと思いました。

配列のサイズを決めるときに、ファイルから読み込んだ情報でサイズを決めたいということでしょうか?定数はほとんど関係ないですよね?

Private maCount() as Integer

maCountのサイズを決定する任意の個所で、
maCount = New Integer(gcintMax - 1){}
とコーディングすれば、その場でサイズを決定できます。
■No2082に返信(よねKENさんの記事)
> そういうことでしたか、一度だけ設定できるような定数が欲しい、ということだと思って動的な定数(言い方は変ですが)を扱う方法が質問内容だと思いました。

すいませんでした。m(_ _)m

> 配列のサイズを決めるときに、ファイルから読み込んだ情報でサイズを決めたいということでしょうか?定数はほとんど関係ないですよね?
>
> Private maCount() as Integer
>
> maCountのサイズを決定する任意の個所で、
> maCount = New Integer(gcintMax - 1){}
> とコーディングすれば、その場でサイズを決定できます。

配列の宣言時に一緒にサイズを固定のですが…
無理なのでしょうか?
>>配列のサイズを決めるときに、ファイルから読み込んだ情報でサイズを決めたいということでしょうか?定数はほとんど関係ないですよね?
>>
>>Private maCount() as Integer
>>
>>maCountのサイズを決定する任意の個所で、
>>maCount = New Integer(gcintMax - 1){}
>>とコーディングすれば、その場でサイズを決定できます。
>
> 配列の宣言時に一緒にサイズを固定のですが…
> 無理なのでしょうか?

ということは、実行時に動作するコードでは論理的に実現不可能なので、
「設定ファイルから読込んだ値」をコンパイル時には埋め込んでしまわないといけません。

ところで、そうすることで本当に実現したいことは何でしょう?
「設定ファイルから読込んだ値を定数として配列等に利用したい」
「配列の宣言時に一緒にサイズを固定」は
何らかの目的に対する実現する一つの手段だと思いますが、
手段ではなく、目的は何ですか?

例えば、以下のように#Ifを使うことで条件付きコンパイルの定数で、
どちらのコードでコンパイルするかを切り分けることはできますが、
こういうので事は足りませんか?

#If DEBUG Then
Public const gcintMax as Integer = 3
#Else
Public const gcintMax as Integer = 5
#End If
現在作成しているソフトを複数のPCで動かしそれぞれ通信する相手の数が違うため
設定ファイルから相手数を読込みたいのです。

>「配列の宣言時に一緒にサイズを固定」
は、作成時にサイズを指定するのを忘れてしまう時があるので何かよい方法が
ないのかと質問をしてみたのです。(^_^;)

>Private maCount() as Integer
>
>maCountのサイズを決定する任意の個所で、
>maCount = New Integer(gcintMax - 1){}
>とコーディングすれば、その場でサイズを決定できます。

上記のように作成することにします。
ぜんぜん関係ない話ですが、アプリケーション構成ファイルとかで
なんとかなりませんでしたっけ?
■No2108に返信(Sugi@ぱぱんぶぃびぃさんの記事)
> ぜんぜん関係ない話ですが、アプリケーション構成ファイルとかで
> なんとかなりませんでしたっけ?
>

ありがとうございます。
せっかくアドバイス頂いたのですが
下記の方法で、任意の箇所でサイズを決定する方法で作成することにしました。

>Private maCount() as Integer
>
>maCountのサイズを決定する任意の個所で、
>maCount = New Integer(gcintMax - 1){}
>とコーディングすれば、その場でサイズを決定できます
解決済み!

DOBON.NET | プログラミング道 | プログラミング掲示板