yohhoyの日記

技術的メモをしていきたい日記

C#

SecureStringクラスは非推奨

.NET Frameworkで提供される System.Security.SecureStringクラス は、新規コードでは利用しないこと。 .NET CoreからはSecureStringクラスは削除されている。 MonoではSecureStringクラスはデータ保護を行わない(mono-5.18.0.245現在) ImportantWe don't …

Is volatile useful with threads?

volatileキーワードはマルチスレッド処理に役立つ?.com(http://isvolatileusefulwiththreads.com/) C http://c.isvolatileusefulwiththreads.com/ C++ http://cxx.isvolatileusefulwiththreads.com/ Java http://java.isvolatileusefulwiththreads.com/ C…

条件演算子と親クラスへの型推論(C#編)

C#

プログラミング言語C#における条件演算子(conditional operator) ?: と、子クラスから親クラスへの型推論に関してメモ。条件演算子の第2, 3項目に親クラスParentから派生した子クラスChild1, Child2を指定した場合、C#では型推論に失敗してコンパイルエラー…

.NET−Javaブリッジライブラリ

.NETクラスとJavaクラス間の相互運用を可能にするライブラリ。MITライセンス(本体)+GPLv3(ツール)。 http://jni4net.com/ https://github.com/jni4net/jni4net .NET CLRとJVMを同一プロセス内で動作させ、.NETクラスからProxyクラス経由でのJavaクラス…

throw null;(C#編)

C#

プログラミング言語C#の throw 文に関するちょっとしたメモ。下記コードはコンパイルエラーとはならず、実際にはSystem.NullReferenceExceptionオブジェクトが送出される。 throw null; // throw new System.NullReferenceException();と等価 Standard ECMA-…

記事"C#メモリモデルの理論と実践"

C#

プログラミング言語C#とメモリモデルに関するMSDNマガジンの記事。C#におけるvolatileキーワードの意味論と、各種アーキテクチャ(x86-x64/Itanium/ARM)への実装マッピングについて言及されている。 日本語訳:http://msdn.microsoft.com/ja-jp/magazine/jj86…

電子書籍"Threading in C#"

C#

C#/CLRによるマルチスレッドプログラミングの基礎〜Parallel LINQ(PLINQ)に関する電子書籍。HTML形式およびPDF形式(125頁)で無償公開されている。 http://www.albahari.com/threading/, Joseph Albahari

イベントのnullチェック回避

C#

イベントに予め “空の匿名メソッド” を登録しておくことで、イベント呼び出し時にnullチェックを逐一記述する必要がなくなる。Null Objectパターン*1。 public delegate void SomeHandler(object sender, SomeEventArgs e); public event SomeHandler SomeEv…

文字列型のnull/空文字列判定

プログラミング言語JavaやC#では文字列型=参照型として定義されるため、空の文字列""と参照先なしnullは明確に区別される。一方で処理ロジックの “有効な文字列を保持しているか?” 確認のために、文字列型の変数に対して「nullまたは空文字列判定」が多用…

文字列を含む構造体のP/Invoke

P/Invokeにおいて “メンバ変数として文字列データを含む構造体” をマネージドコード(C#)からアンマネージド(native)関数へ渡す方法メモ。注意:本記事中のC#コードでは例外安全を考慮しておらず、確保したメモリブロックのリークが発生しうる。メモ:アンマ…

C#のusingステートメント

C#

プログラミング言語C#におけるusingステートメント利用に関するメモ。基本形は下記の通り。型TはIDisposableインタフェースを実装する必要がある。 using (var t = new T(...)) { /* * tを使った処理 */ } // t.Dispose()が呼ばれる 複数リソースを扱う例: …

P/Invokeとパラメータ方向属性

C#からのP/Invokeにおけるパラメータの方向属性*1についてメモ。C#における既定の方向属性は下表のとおり。呼び出し元/呼び出し先はマネージド(C#)/アンマネージド(native)いずれかになる。つまりexternメソッド呼び出しであればC#→nativeとなり、アンマネ…

P/Invokeの呼び出し規約+文字セット指定

C#からのP/Invokeにおける関数呼び出し規約、文字セット(MBCS/UNICODE)の指定方法についてメモ。P/Invoke既定の呼び出し規約はCallingConvention.StdCallとなっており、アンマネージド側が__stdcallならば明示指定は必須でははない。*1 P/Invoke既定の文…

C#でstrong typedefもどき

C#

プログラミング言語C#でstrong typedef("強い"型の別名)っぽいものを自前で実装する方法。C# feature request: strong typedefs | Microsoft Connectよりサンプルコード引用。この要求は "by design" でクローズされている。 struct EmployeeID { private …