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 の場合、文言を変えるには再コンパイルが必要になります。アプリケーションによっては
その方が良いという場合もあれば、再コンパイルは面倒だという場合もあるでしょうね。
(外部リソースにすると、ユーザーが勝手に編集して情報を破損させてしまう危険性があるなど)
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では気になりませんが)ので内容が
変わる可能性がないものには不適。
他に内部に情報もつならリソースを使用するという方法もある。
実行時まで確定しない。
constで指定した内容を変更するにはリコンパイルの必要がある。
app.configで指定した内容はファイルを書き換るだけでよい。
app.configファイルの読込には多少時間がかかる(最近のPCでは気になりませんが)ので内容が
変わる可能性がないものには不適。
他に内部に情報もつならリソースを使用するという方法もある。
投稿者 ちびぞ~  (社会人)
投稿日時
2012/5/7 15:32:47
いつも参考にさせていただいています。
vb6を少々勉強してからのvb2008を勉強中でかなりの初心者です。
vb.netについて質問があります。
メッセージボックスの文言やタイトルなどを定数でもつ場合、
以前は、constで文言やタイトルの宣言をていたのですが、
vb2008では、app.configファイルがあることがわかりました。
constとapp.configファイルは、どうやって使い分けをおこなえば良いのでしょうか。
今回の文言のような定数宣言は、constでおこなった方が良いのでしょうか。
それぞれのメリット、デメリットなども踏まえてアドバイスをいただけるとうれしいです。
よろしくお願いいたします。
vb6を少々勉強してからのvb2008を勉強中でかなりの初心者です。
vb.netについて質問があります。
メッセージボックスの文言やタイトルなどを定数でもつ場合、
以前は、constで文言やタイトルの宣言をていたのですが、
vb2008では、app.configファイルがあることがわかりました。
constとapp.configファイルは、どうやって使い分けをおこなえば良いのでしょうか。
今回の文言のような定数宣言は、constでおこなった方が良いのでしょうか。
それぞれのメリット、デメリットなども踏まえてアドバイスをいただけるとうれしいです。
よろしくお願いいたします。
とても参考になりました。
constやapp.config以外にも色々な宣言方法があるのですね。
色々と実験してみます。