未分類Tips のバックアップ(No.6) - PukiWiki

CSharp?

アプリケーション構成ファイル(App.config)、Web構成ファイル(Web.config)にカスタム構成セクションを追加する
[edit]

 ポイントは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

このページのトップへ

現在のアプリのパスを取得
[edit]

string path = System.Windows.Forms.Application.StartupPath;
MessageBox.Show(path);
このページのトップへ

メソッド名と取得する
[edit]

StackTrace st = new StackTrace(true);
foreach (StackFrame f in st.GetFrames())
{
      System.Windows.Forms.MessageBox.Show(f.GetFileColumnNumber() + "-" + f.GetMethod());
}
このページのトップへ

トレースソースの作成
[edit]

http://msdn.microsoft.com/ja-jp/library/ms228984.aspx app.config によって、作成することが可能です。

このページのトップへ

ローカルのTempパスを取得
[edit]

//ユーザーのローカル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));

結果:

このページのトップへ

レジストリへのアクセス
[edit]

HKEY_CURRENT_USER へのアクセスは管理者権限が要りません。
HKEY_LOCAL_MACHINE へのアクセスは管理者権限が要ます。

このページのトップへ

Windows 7 VHD 利用するラップクラス
[edit]

http://files.codes-sources.com/fichier.aspx?id=50320&f=Win7_VirtualDiskWrapper%2fVirtualDiskWrapper%2fVHD.cs

このページのトップへ

別のスレッドからコントロールを操作
[edit]

this.Invoke((MethodInvoker)delegate() 
   { 
       progressBar1.Maximum = 100; 
   } 
);
このページのトップへ

System.Runtime.Serialization.Jsonの参照
[edit]

名前は、System.Runtime.Serialization.JSON.DataContractJsonSerializerなのに、System.Runtime.Serialization.JSONパッケージに入っていない。

DataContractJsonSerializer クラス
名前空間 : System.Runtime.Serialization.Json
アセンブリ : System.ServiceModel.Web (System.ServiceModel.Web.dll 内)

このページのトップへ

数値を3桁カンマ区切りにフォーマットする
[edit]

 stringクラスのformatメソッドを利用

int val = 10000;
Console.WriteLine(string.Format("{0:N0}", val));//第二引数は string 型に宣言すると、変換できません。
このページのトップへ

特定の外部アセンブリにのみ internalスコープのクラスやメソッドを公開する
[edit]

(抜粋)
[assembly: InternalsVisibleTo("TestClassLibrary1")]

(参考URL)
http://www.atmarkit.co.jp/fdotnet/csharp20/csharp20_07/csharp20_07_03.html

このページのトップへ

イベントの複数登録を防ぐ
[edit]

イベントの複数登録を防ぐため、下記のようにイベントを定義する必要があります。

private EventHandler foo_; 

public event EventHandler Foo 
{ 
    add 
    { 
        if (foo_ == null || !foo_.GetInvocationList().Contains(value)) 
        { 
            foo_ += value; 
        } 
    } 
    remove 
    { 
        foo_ -= value; 
    } 
} 
このページのトップへ

アセンブリロードする際のファイルロック
[edit]

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));
};
このページのトップへ

型は継承関係を調べる
[edit]

//アセンブリ内のすべての型
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
   }
}
このページのトップへ

型から動的にインスタンスを作成
[edit]

//対象の型
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, メソッドのパラメタ... });

コメント:




トップ   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS

yVoC[UNLIMITȂ1~] ECirŃ|C Yahoo yV LINEf[^[Ōz500~`I


z[y[W ̃NWbgJ[h COiq 萔O~ył񂫁z COsیI COze