C

C#関連


名前空間


名前空間(name space)とは、 ファイルを種類ごとにフォルダに分けて管理するのと同じように、 クラスを種類ごとに分けて管理するための機構。

参考サイト



ICollection


すべてのコレクションについて、サイズ、列挙子、および同期メソッドを定義する。

参考サイト



lock


マルチスレッドの環境で排他制御を行うために、使用。
javaで言うsynchronizedかな。

Object thisLock = new Object();
lock (thisLock)
{
   // Critical code section
}


参考サイト



ICollection


すべてのコレクションについて、サイズ、列挙子、および同期メソッドを定義する。

参考サイト



log4net


log4jみたいなログ出力に使う。
log4net.dllをインストール後、参照設定を追加する。

二つのログファイルに分けて出力する


app.config(任意の名前)に記載を行う

例)



<?xml version="1.0"?>
<configuration>

 <configSections>
   <section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler,log4net"/>
 </configSections>

 <log4net>

   <!-- ログ出力先の定義 -->

   <appender name="SystemLog" type="log4net.Appender.RollingFileAppender">
     <!-- 作成するログファイル -->
     <param name="File" value=".\log\System\System"/>
     <!-- 追加 -->
     <param name="AppendToFile" value="true"/>
     <!-- 日付ごとにファイルを作成することを指定 -->
     <param name="RollingStyle" value="date"/>
     <!-- ログ・ファイル名が固定 -->
     <param name="StaticLogFileName" value="false"/>
     <!-- ファイル名の日付部分 -->
     <param name="DatePattern" value="&quot;.&quot;yyyyMMdd&quot;.log&quot;"/>
     <layout type="log4net.Layout.PatternLayout">
       <!-- ログの書式 -->
       <conversionPattern value="%date [%thread] [%-level] %message%newline"/>
     </layout>
   </appender>

   <appender name="RWLog" type="log4net.Appender.RollingFileAppender">
     <!-- 作成するログファイル -->
     <param name="File" value=".\log\RWLog\RWLog.log"/>
     <!-- 追加 -->
     <param name="AppendToFile" value="true"/>
     <maximumFileSize value="20MB" />
     <!-- 最大保存ファイル数 (古い順に削除) -->
     <param name="MaxSizeRollBackups" value="2" />
     <!-- ログ・ファイル名が固定 -->
     <param name="StaticLogFileName" value="true"/>
     <layout type="log4net.Layout.PatternLayout">
       <!-- ログの書式 -->
       <conversionPattern value="%date %message%newline"/>
     </layout>
   </appender>

   <root>
     <!-- ログのレベルを指定 -->
     <level value="ALL"/>
   </root>

   <logger name="SystemLogger">
     <appender-ref ref="SystemLog" />
   </logger>

   <logger name="RWLogger">
     <appender-ref ref="RWLog" />
   </logger>

 </log4net>

 <startup><supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.0"/></startup>	<runtime>
	<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
		<dependentAssembly>
			<assemblyIdentity name="System.Web" publicKeyToken="B03F5F7F11D50A3A" culture="neutral"/>
			<bindingRedirect oldVersion="0.0.0.0-4.0.0.0" newVersion="4.0.0.0"/>
		</dependentAssembly>
	</assemblyBinding>
</runtime>
</configuration>



app.configにファイル2つ分定義後、

ILog ilog = LogManager.GetLogger("SystemLogger");

でどちらのロガーを使用するか指定し、

 ilog.Debug(logMessage);
 ilog.Info(logMessage);

でログの出力を行う。

日付ごとにログファイル分けをする場合、期間でログを削除することは不可


     <!-- 日付ごとにファイルを作成することを指定 -->
     <param name="RollingStyle" value="date"/>

で日付ごとにファイルを生成することができるが、
RollingStyleにdateを指定してしまうと、

     <!-- 最大保存ファイル数 (古い順に削除) -->
     <param name="MaxSizeRollBackups" value="2" />

のようにMaxSizeRollBackupsを指定しても無視されてしまう!

NUnitからlog4netを使う


テスト前に明示的に.configを読み込む必要がある

log4net.Config.XmlConfigurator.Configure();

参考




ビット演算


ビット演算については以下のサイトを参考。

参考サイト


対象の1ビットを反転させる


フラグなどでビットを使用している場合、対象の1ビットのみを反転したいことがある。


  • 0101 を 0111 にする

0101 | 0010

対象の1ビットのみ1にしたものとORする

  • 0101 を 0001 にする

0101 & 1011

対象の1ビットのみ0にしたものとANDする

全ビット反転


  • 0101 を 1010 にする

~0101

全体を反転できる


TCPClientのConnectedプロパティについて


TCPClientのConnectedは現在の接続状態をboolで返すのではなく、
最後に接続したときの状態を返す。

したがって、途中で接続が切断した場合でも、最後の接続が成功していればtrueを返す。


「@"文字列"」 でエスケープしなくてもよくなる


文字列に「@」を付けることで"D:\doc\IDC"のような文字列でも
エスケープしなくてもよくなる。

便利です!

ちなみに、改行してもOK。



Null&空文字列チェック


String.IsNullOrEmptyメソッド(String)を使用することで、
Null&空文字列チェックを容易にできる。



コメント・トークン


TODO	未実装のため、新たにコードを追加する必要がある個所
HACK	実装済みだが、コードをさらに改善する必要がある個所
UNDONE	未完成のため、さらにコードを編集する必要がある個所


Environment.GetCommandLineArgs メソッド


現在のプロセスに対するコマンドライン引数を格納している文字列配列を返す

注意※
配列の先頭の要素には、実行中のプログラムのファイル名が格納される


数値とバイト列の変換、文字列とバイト列の変換 (BitConverter, Convert, X2, IsLittleEndian)


最終更新:2012年12月13日 22:56