Frameworkの上で動く言語は、C#、VB.NET、C++/CLI、J#、Delphi.NETなどなど、多数ある。これらは全て、MSILと呼ばれる中間コードへとコンパイルされる。MSILへコンパイルされたアセンブリは、他の.NET言語から簡単に利用できる。ある言語では実装されているが、ある言語では実装されていない機能がある。C++やC#の「ポインタ」は、VB.NETでは利用できない。全ての.NET言語がサポートしなければならない仕様を共通言語仕様(CLS)と呼ぶ。CLSは、外部に公開する部分にだけ適用される。メソッド内の処理コードなどには関係ない。先程挙げた「ポインタ」は、CLSに定義されていないため、実装されている言語とされていない言語が存在する。クラスライブラリで公開しているクラスのメンバに、ポインタを返すメソッドがあったとする。ポインタはCLSに定義されていないため、このメソッドは、CLSに準拠していないメンバとなる。VB.NETからこのメンバを利用することはできない。クラスライブラリを開発する際に、開発言語とは異なる言語からの利用が想定される場合、クラスライブラリをCLS準拠にする必要がある。CLSに準拠させるには、当然、公開する箇所がCLSの規定に従っている必要がある。それだけではなく、CLS準拠であることを明示的に示さなければならない。CLS準拠であることを明示的に示すには、CLSCompliantAttributeを用いる。System.CLSCompliant(true)]を付加することで、アセンブリに含まれる全ての型、メンバがCLS準拠であると示したことになる。CLS非準拠な型やメンバが含まれている場合は、個別に[System.CLSCompliant(false)]を付加することで、部分的にCLS非準拠を示せる。Frameworkの主要クラスライブラリであるmscorlibも、ほとんどの型はCLSに準拠しているが、UInt32構造体など、一部CLSに準拠していない型が含まれている。19:07前に書いたTransactionScopeによる暗黙のトランザクションの実装や、COM+による自動トランザクションは、MSDTCというWindowsサービスを利用している。これらのトランザクション実装は、MSDTCが起動されていないと正常に動作しない。いう名前でWindowsサービスに登録されている。MSDTCが起動されていない場合は、以下のようにしてMSDTCが自動で起動するよう設定する。いう項目を右クリックし、プロパティを開く。ボタンをクリックする。ボタンをクリックする。これで正常にトランザクション処理が行われる。DTCを完全に有効にする手順が記載されている。プロシージャが、この問題の影響を受ける場合があります。完全に有効にする必要があります。書いてあるので、そういう問題に遭遇した場合は完全に有効にすればいい(遭遇しなきゃしなくていい)ってことかな。01:04なんか忘れがちなのでメモ。テキストファイルやXMLファイルなど、全てのファイルはアセンブリに埋め込んで利用することができる。埋め込まれたリソースを利用するには、以下のようにリフレクションを利用する。resourceReader.ReadToEnd();}}Console.WriteLine(outputText);Console.ReadLine();}}}注意すべきは、AssemblyオブジェクトのGetManifestResourceStreamメソッドに渡すファイル名には、名前空間を含める必要があるということだ。設定してある名前空間(サブディレクトリに配置した場合、これにディレクトリ階層が加えられた名前空間)である。Editionを除く)でIronPython1.0によるIronPython開発を行うことができる。Editionを除く)がインストールされている必要がある。次にこのソリューションをビルド&実行する。2005がもう一つ起動される。2005でIronPython開発ができる。Frameworkでは、トランザクションの実装方法が複数存在する。大きく分けると明示的なトランザクションと暗黙的なトランザクションに分かれる。明示的なトランザクションはトランザクションの開始,コミット,ロールバックを明示的に行う管理方法。トランザクションの開始、終了が明確に決まる。暗黙的なトランザクションはトランザクションの開始,コミット,ロールバックが暗黙的に行われる管理方法。トランザクションが開始されていたらそのトランザクションに参加(便乗)する、といったことが可能。Frameworkでのトランザクション実装方法を挙げる。従来からある方法として、データベーストランザクション,手動トランザクション,自動トランザクションがある。]ストアドプロシージャ内でのトランザクション処理。CLRにより、C#やVB.NETなどの.NET言語で実装できる。]ADO.NETが提供する、明示的なトランザクション処理。Framework2.0で新しく追加された。]COM+を利用した、暗黙的なトランザクション処理。COM+を利用するには、ServicedComponentクラスを継承させる。アセンブリを厳密名で署名し、サービスコンポーネントとして登録する必要がある。】.NET2.0では、新しくSystem.Transactions名前空間(System.Transactions.dll)が追加された。主なクラスとして、明示的なトランザクションを提供するCommittableTransactionクラスと、暗黙的なトランザクションを提供するTransactionScopeクラスがある。TransactionScopeの方が手軽で、CommittableTransactionよりもTransactionScopeを使用すべきである。]明示的なトランザクション処理。CommittableTransactionよりもTransactionScopeを使用すべき。]COM+による自動トランザクションよりも遥かに容易に実現できる、暗黙的なトランザクション処理。23:40C#のコーディング俺規約。ガイドラインに従うとして、それ以外の範囲で俺的な規約。]フィールドの初期化はフィールドの定義時ではなく全てコンストラクタで行う。]・フィールドの定義と一緒に初期化しても、その後コンストラクタで更に初期化される可能性があるから。(読みづらい上に、無駄。)・あるフィールドでは定義と一緒に初期化して、あるフィールドでは定義で初期化せずコンストラクタで初期化してじゃ読みづらい。]静的フィールドも同様に静的コンストラクタで初期化する。静的フィールドは、定義時に初期化し、静的コンストラクタを明示的に宣言しないこと。詳細はこちらの記事を参照。Frameworkでは、メモリはGCが管理する。オブジェクトのメモリは、そのオブジェクトがアクセス可能である限り、回収されることはない。オブジェクトがアクセス不可能になるとオブジェクトのメモリはGCの対象となり、適切なタイミングでGCが回収してくれる。変数(フィールドやらローカル変数やら)に格納されている参照のことを「強い参照」と言う。「アクセス可能なオブジェクト」とは、強い参照が存在するオブジェクトのことを言う。その強い参照を所持しているオブジェクトもアクセス可能なオブジェクトである必要がある。強い参照を所持しているオブジェクトを辿って行くとアクセス不可能なオブジェクトに辿り着く場合、それらは全てアクセス不可能なオブジェクトである。実際にアクセスされている最中(コンストラクタ実行中だったりメソッド実行中だったり)のオブジェクトも、アクセス可能なオブジェクトである。冒頭でも書いたとおり、アクセス可能なオブジェクトはGCの対象にはならない。「強い参照」が存在せず「弱い参照」が存在するオブジェクトなら、弱い参照を通して呼び出すことができる上、GCの対象となる。「弱い参照」とは、WeakReferenceクラスによる参照である。WeakReferenceは、コンストラクタで対象オブジェクトを受け取る。WeakReferenceオブジェクトのTargetプロパティを通して対象オブジェクトにアクセスできるのだが、WeakReferenceオブジェクトは、内部に強い参照を保持するのではなく、参照をIntPtr構造体として保持している。これにより、対象オブジェクトはGCの対象となる。対象オブジェクトがGCの対象となるので、GCによって対象オブジェクトのメモリが回収された場合は、Targetプロパティはnull参照を返す。そのため、対象オブジェクトにアクセスする際は、Targetプロパティから強い参照を取得して、強い参照を通してアクセスする必要がある。具体的には、まずTargetプロパティを変数に代入して強い参照を取得する。その変数の値がnull参照であった場合は、再び対象オブジェクトを生成する。その後、その変数を通して対象オブジェクトにアクセスし、最後に強い参照を消去する(変数にnull参照を代入したり、ローカル変数ならスコープ外に処理が移れば勝手に消える)。hoge;}}IsAliveプロパティを使って、対象オブジェクトがGCに回収されているかどうかを調べたり、直接Targetプロパティとnullを比較することもできるが、これらのプロパティにアクセスした時は回収されていなくても、直後に回収されてしまうというケースもありえる。上記の例のように最初にTargetプロパティから強い参照を取得する必要がある。(強い参照の取得さえちゃんとすれば、IsAliveやTargetとの比較を用いても問題ない。)弱い参照を使用するシーンとしては、サイズの大きなオブジェクトを保持して利用する際に、そのオブジェクトが常にメモリを占有してしまうよりは、GCの対象としておき、回収された場合は再び作成するという手段を取った方が、作成にかかるコストを考慮しても有益だという場合などである。バージョン1.0がリリースされた。Framework上で動く動的型付け言語で、コンソールでの対話形式プログラミングが可能。2.0に対応している。Studio使ってテーブル間の外部キー制約を作成しようと思ったら、DeleteRuleとUpdateRule共に「重ねて表示」とかいう列挙値があった。なんだこれ?って調べたら、どうやら「Cascade」(参照先の主キーもしくは一意キーが変更されたら参照元の値も連鎖して変更され、参照先のレコードが削除されたら参照元のレコードも連鎖して削除される)のことだった。あと、こことかみると、UpdateRuleに「重ねて表示」を設定すると参照先の更新で削除されると書いてあるが、削除ではなく更新がされる。(参照先のキーの列が一意キーでnull許可していて、そこにnullを設定した場合は削除されるけど。30ブログ内検索カウンターアクセスカウンターおすすめプロフィールAuthor:よこけん性別は男です。生年月日は1984年2月頃です。社会人は2004年4月頃からやってます。C#は2004年10月頃からやってます。このブログは2006年7月頃からやってます。アプリケーションリンクopus-i商用可・加工可で、綺麗な素材を提供していらっしゃいます。紹介していらっしゃいます。中心に扱っていらっしゃいます。コマンドレットをまとめたスナップインです。クラスライブラリを作ってみました。最近の記事ブログ移転しました。返事を返せない場合があります。