CSharp?
ポイントはConfigurationSection、ConfigurationElement、ConfigurationElementCollectionを継承したクラスでカスタム構成セクションを読み込む下地を作ります。あとはConfigurationManagerを使って呼び出すだけです。
http://blogs.wankuma.com/tatsumihr/articles/79793.aspx
参考:
MSDN:方法 : ConfigurationSection を使用してカスタム構成セクションを作成する
http://msdn2.microsoft.com/ja-jp/library/2tw134k3(vs.80).aspx
string path = System.Windows.Forms.Application.StartupPath; MessageBox.Show(path);
StackTrace st = new StackTrace(true); foreach (StackFrame f in st.GetFrames()) { System.Windows.Forms.MessageBox.Show(f.GetFileColumnNumber() + "-" + f.GetMethod()); }
http://msdn.microsoft.com/ja-jp/library/ms228984.aspx app.config によって、作成することが可能です。
//ユーザーのローカルApplication Dataフォルダのパスを取得 //Path.Combineメソッドを利用して、パスの結合することができる string path = Path.GetFullPath(Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.LocalApplicationData), "..\\Temp"));
結果:
string path2 = Path.GetFullPath(Environment.GetFolderPath(Environment.SpecialFolder.LocalApplicationData));
結果:
HKEY_CURRENT_USER へのアクセスは管理者権限が要りません。
HKEY_LOCAL_MACHINE へのアクセスは管理者権限が要ます。
this.Invoke((MethodInvoker)delegate() { progressBar1.Maximum = 100; } );
名前は、System.Runtime.Serialization.JSON.DataContractJsonSerializerなのに、System.Runtime.Serialization.JSONパッケージに入っていない。
DataContractJsonSerializer クラス
名前空間 : System.Runtime.Serialization.Json
アセンブリ : System.ServiceModel.Web (System.ServiceModel.Web.dll 内)
stringクラスのformatメソッドを利用
int val = 10000; Console.WriteLine(string.Format("{0:N0}", val));//第二引数は string 型に宣言すると、変換できません。
(抜粋)
[assembly: InternalsVisibleTo("TestClassLibrary1")]
(参考URL)
http://www.atmarkit.co.jp/fdotnet/csharp20/csharp20_07/csharp20_07_03.html
イベントの複数登録を防ぐため、下記のようにイベントを定義する必要があります。
private EventHandler foo_; public event EventHandler Foo { add { if (foo_ == null || !foo_.GetInvocationList().Contains(value)) { foo_ += value; } } remove { foo_ -= value; } }
Assembly.LoadFromメソッドを利用してアセンブリを読み込む場合、アセンブリをロードした後、ファイルがロックされ、AssembleクラスにUnLoadとかリリースするメソッドが提供していません。この問題を解決するため、下記のようにAssembly.Loadメソッドを利用しファイルのByte値を読み込む方法で解決できます。
System.Reflection.Assembly.Load(System.IO.File.ReadAllBytes(path))
この方法でロードする対象のアセンブリがさらに参照するアセンブリがある場合、上記のソースコードだけで、参照されているアセンブリを読み込めないエラーが発生します。AppDomainのAssemblyResolveイベントの実装によって、このエラーを回避することができます。
AppDomain.CurrentDomain.AssemblyResolve += CurrentDomain_AssemblyResolve; ..... Assembly CurrentDomain_AssemblyResolve(object sender, ResolveEventArgs args) { var refAssemblyPath = "..\\..\\bin\\" + args.Name.Substring(0, args.Name.IndexOf(",")) + ".dll"; return Assembly.Load(System.IO.File.ReadAllBytes(refAssemblyPath)); };
//アセンブリ内のすべての型 foreach (Type t in assebly.GetTypes()) { //指定したインターフェイスを実装しているかを調べる if (t.IsClass && t.IsPublic && !t.IsAbstract && t.GetInterface("インターフェイス型名") != null) { //True } //指定したクラスを継承しているかを調べる if (t.IsClass && t.IsPublic && !t.IsAbstract && t.IsSubclassOf(typeof(継承先クラス)) != null) { //True } }
//対象の型 Type t; object control = t.InvokeMember(null, System.Reflection.BindingFlags.CreateInstance, null, null, null); t.InvokeMember("呼び出すメソッド名の文字列", System.Reflection.BindingFlags.InvokeMethod, null, control, new object[] { メソッドのパラメタ1, メソッドのパラメタ2, メソッドのパラメタ... });
コメント: