constとapp.configの違い への返答

投稿で使用できる特殊コードの説明。(別タブで開きます。)
本名は入力しないようにしましょう。
投稿した後で削除するときに使うパスワードです。返答があった後は削除できません。
返答する人が目安にします。相手が小学生か社会人かで返答の仕方も変わります。
最初の投稿が質問の場合、質問者が解決時にチェックしてください。(以降も追加書き込み・返信は可能です。)
※「過去ログ」について書くときはその過去ログのURLも書いてください。

以下の返答は逆順(新しい順)に並んでいます。

投稿者 ちび  (社会人) 投稿日時 2012/5/7 19:58:28
ご回答ありがとうございました。
とても参考になりました。
constやapp.config以外にも色々な宣言方法があるのですね。
色々と実験してみます。
投稿者 魔界の仮面弁士  (社会人) 投稿日時 2012/5/7 16:45:06
> constとapp.configファイルは、どうやって使い分けをおこなえば良いのでしょうか。

My Project の[設定]に記述した設定は、その初期値が app.config 内に記録され、
それを My.MySettings (もしくは、My.Settings.Default)経由で受け取ることができますよね。

この app.config による設定というのは、VB6 でいうところの
 ・ ini ファイル
 ・ SaveSetting ステートメント/DeleteSetting ステートメント
 ・ GetSetting 関数/GetAllSettings 関数
などに相当する物と考えると分かりやすいのではないでしょうか。
(実際にはもっと高機能ですが)


スコープを[アプリケーション]にした設定項目は、基本的に読み取り専用です。
XML ファイルを直接書き換えてリロードしたり、あるいは
System.Configuration.ConfigurationManager.AppSettings(key) 経由で
同じ値が保持されます。データベースの接続文字列などが保存されることもあります。

一方、[ユーザー]スコープの項目は、実行時に編集可能な項目となりますが、
この設定は Windows にログオンしているユーザーごとに個別で保持されます。


この他、プロパティへのバインディングといった機能もあります。
http://dobon.net/vb/dotnet/programing/dynamicproperties.html

また、System.Configuration.ConfigurationSettings.AppSettings 経由で
利用する手法もあります。
http://dobon.net/vb/dotnet/programing/appconfigfile.html


さらに、app.config の機能は文字列等の保持だけに留まりません。たとえば VB6 の
 ・ App.LogEvent メソッド
 ・ App.StartLogging メソッド/LogModeプロパティ/LogPathプロパティ
に相当する機能として、「My.Application.Log」によるログ出力機能がありますが、
このログの出力方法を制御する目的にも app.config を利用することができます。
http://dobon.net/vb/dotnet/programing/myapplicationlog.html



> 今回の文言のような定数宣言は、constでおこなった方が良いのでしょうか。

VB6 の付属サンプル "ATM.VBP" のように、「リソース」を使う方法もありますね。
実際、.NET のエラーメッセージなどはリソースで管理されています。

リソースにもいくつか種類があり、EXE 内に埋め込まれるリソースのほか、
フォーム単位のもの、外部ファイルで保持されるものなどがあります。
(ちなみに、VB6 のリソースは、Win32リソースと呼ばれることがあります)
http://www.atmarkit.co.jp/fdotnet/dotnettips/214resources1/resources1.html
http://www.atmarkit.co.jp/fdotnet/dotnettips/314winmultilang/winmultilang.html


この他、文言管理のためにテキストを別ファイルで配置しておくとか、
別途データベース等で管理する方法などもあります。
そのアプリケーションにとって、都合の良い方法をお好みで選んでみてください。



> それぞれのメリット、デメリットなども踏まえてアドバイスをいただけるとうれしいです。

Const の場合、文言を変えるには再コンパイルが必要になります。アプリケーションによっては
その方が良いという場合もあれば、再コンパイルは面倒だという場合もあるでしょうね。
(外部リソースにすると、ユーザーが勝手に編集して情報を破損させてしまう危険性があるなど)
投稿者 shu  (社会人) 投稿日時 2012/5/7 15:46:33
constはコンパイル時に確定するがapp.configはファイルから読込むものなので
実行時まで確定しない。
constで指定した内容を変更するにはリコンパイルの必要がある。
app.configで指定した内容はファイルを書き換るだけでよい。

app.configファイルの読込には多少時間がかかる(最近のPCでは気になりませんが)ので内容が
変わる可能性がないものには不適。


他に内部に情報もつならリソースを使用するという方法もある。
投稿者 ちびぞ~  (社会人) 投稿日時 2012/5/7 15:32:47
いつも参考にさせていただいています。
vb6を少々勉強してからのvb2008を勉強中でかなりの初心者です。

vb.netについて質問があります。
メッセージボックスの文言やタイトルなどを定数でもつ場合、
以前は、constで文言やタイトルの宣言をていたのですが、
vb2008では、app.configファイルがあることがわかりました。
constとapp.configファイルは、どうやって使い分けをおこなえば良いのでしょうか。
今回の文言のような定数宣言は、constでおこなった方が良いのでしょうか。
それぞれのメリット、デメリットなども踏まえてアドバイスをいただけるとうれしいです。

よろしくお願いいたします。