C#

MAG画像ローダ

唐突にPC98時代によく使われていたMAG画像形式ファイルを読み込むプログラムをC#に移植してみました。2,3個の画像でしか試してないのでバグがあるかも。 // 謝辞 // MITH(T.Saito)氏のWAB−S用マルチグラフィックローダ WMLのソースを参考にさせていた…

MEFでオープンジェネリック型をエクスポート

MefContribにはジェネリック用のGenericCatalogクラスがあります。これを使うとオープンジェネリック型をエクスポートすることができます。ただ、ドキュメント不足な上に、ちょっと癖がありそうです。公開するインタフェースは、こんな感じです。 // このイ…

LinFu.DynamicProxyの使い方が分からない

MefContribにCastle以外にもLinFu.DynamicProxyが含まれていたので弄ってみたのですが、どうにも使い方が分かりません。 using LinFu.DynamicProxy; public class MyInterceptor : IInterceptor { public object Intercept(InvocationInfo info) { return in…

MEFでAOP

過去に似たようなことをやった気がしますが、今回はMefContribを使った一応、正式っぽい方法で。 using System; using System.Linq; using System.Reflection; using System.ComponentModel.Composition; using System.ComponentModel.Composition.Primitive…

JetBrains.Annotations

ReSharperはコード分析してnull参照が発生する可能性があるところを指摘する機能があります。 このように該当箇所に波線が出て便利です。しかし、メソッドの戻り値がnullの場合は、残念ながらチェックされません。 ただ、この機能はカスタム属性が使われてい…

WebActivatorとPreApplicationStartMethodAttribute

MefContrib.MVC3によって生成された、AppStart_MefContribMVC3.csには、MEFを使用するための初期化コードがありますが、このコードは誰が呼び出しているのでしょうか? [assembly: WebActivator.PreApplicationStartMethod(typeof(TestMvcApplication.App_St…

ASP.NET MVC 3でMEFを使う

MefContrib.MVC3を使うと簡単にASP.NET MVCからMEFを使えるのでご紹介。前提:NuGetがインストール済みなこと。まず、ASP.NET MVC3のプロジェクトの用意しましょう。ASP.NET MVC3を選択。 面倒なのでデフォルト実装ありで。 では、MEFを使えるようにしましょ…

MarshalByRefObjectから継承する

小ネタ。通常、MarshalByRefObjectから継承することはあまり無いとは思いますが、RealProxyを使ったAOPモドキなんかで、ひょっとしたら使うことがあるかも知れません。その場合のデメリットを見てみましょう。 using System; using System.Diagnostics; name…

フィールドの初期化とコンストラクタ

C#

小ネタです。 namespace AssemblySize { class Program { // フィールドの初期化が沢山 private int _0 = 0; private int _1 = 1; private int _2 = 2; private int _3 = 3; private int _4 = 4; private int _5 = 5; private int _6 = 6; private int _7 = …

カスタム属性なしのMEF

CodePlexにあるMEF v2ではカスタム属性ではなくコードでImport/Exportが可能になっています。「おいおい、依存関係の解決をコードでやらずに設定ファイルに出して、設定ファイルが複雑になるのでカスタム属性で指定できるようになったのに、また、コードに戻…

小ネタ

C#

ソースレビューをしていてAnyで充分なところでCountを使っているケースを見かけたので。STLのempty/sizeの使い分けと同様ですね。 using System; using System.Diagnostics; using System.Linq; class Program { static void Main() { var q = Enumerable.Ra…

C#の型推論は怠けすぎ

2010-09-29(via やねうらおさんとこ)C#はバランスと取れた良い言語ですが、あえて欠点を挙げると型推論がイマイチですよね。 using System; using System.Collections.Generic; module M { static Main() : void { // C#のvarに近いが初期化は必須ではない /…

カスタム属性が見えるモノ

最近知ったショックなこと。 using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace Sample { [AttributeUsage(AttributeTargets.Class)] class MyAttribute : Attribute { public string Name { private set; …

RubyのCycle

ネットを見ていて、true, false, true...と繰り返すコードについての話題があり、そこでRubyにcycleなるものがあることを知りました。Rubyに対するアンテナが低くて・・・(^^;C#のEnumerableクラスには同様のものはありませんが、自分で書くとこんな感じでし…

usingの闇

C#

More Effective C#を読んでいて、ふとusingの知らない使い方を発見。 using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace UsingSample { class Foo : IDisposable { public void Dispose() { Console.WriteL…

IronPythonを使った多重継承

C#の場合、多重継承はインタフェースを使うことになりますが、実装クラスへの委譲を書くのがちょっと面倒です。一方、Pythonは実装の多重継承ができるのでこれを利用して委譲の手書きを手抜きできないか試してみました。まずは、多重継承させるインタフェー…

IronRuby RCでのホスティング

IronRubyはα時代から弄っていましたが、バージョンが上がるたびにホスティング方法が変更されていました。RCになったのでそろそろ最終版だと思いたいのですが、どーなんでしょ。(^^;てきとーなrubyのクラス。 class Foo def bar puts 'baz' end def add(x, y…

はじめてのBing API

私の調べもの(MS系技術情報)の場合、googleよりもbingの方が良い結果を返すことも多く、最近はもっぱらいbingを使っていたりします。Bing API 2.0のリファレンスを見たら何やら面白いことができそうなので、ちょっと弄ってみました。とは言っても英語->日本…

Silverlight4の機能強化

Silverlight4のβが出ていたので早速インストール。ホイールマウスに対応したらしいので実験君。てきとーUI

ExpandoObject

C#

.NET4.0で追加されたExpandoObjectクラスを使うと実行時にメンバーの追加、削除が出来ます。 using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Dynamic; namespace DynamicObjectSample { class Progra…

はじめてのBing Maps Silverlight Control

Download Bing Maps Silverlight Control SDK from Official Microsoft Download Center Silverlight用のBingMapsコントロールがリリースされたので、勉強がてら簡単なサンプルを作成してみます。お題はコレ。 ↑テキストボックスにキーワード(例えば東京タワ…

labmda式で再帰呼び出し

C#

※一発ネタです。本気で読まないようにしてください。(^^;lambda式で再帰呼び出しするには、先に式を格納する変数を初期化する必要があります。 using System; namespace LambdaSample { class Program { static void Main(string[] args) { // 再起呼び出し…

dynamicなメソッド

C#

dynamicってメソッドの戻り値にも指定できたんですね。 using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace DynamicFuncSample { class Program { public static dynamic Func(int n) { // 偶数ならint、奇…

フォロー

C#

dynamicの間違った使い方 - 匣の向こう側 - あまりに.NETな 時間がなかったので パフォーマンスは期待できないはず・・・ と、茶を濁していましたが計測したところ、dynamic版はint専用より4.5倍くらい遅かったです(例で書いたSumの場合)。

delegateによるSingleton

C#

Life is beautiful: Python Hack : 噛めば噛むほどおいしくなるクロージャの話 こちらの記事を読んでC#でも出来るなぁ、っと実験君。 using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Diagnostics; na…

dynamicの間違った使い方

C#

新しい機能を見つけたら、まず、一発ネタをやるのが恒例(?)なので、Genericで汎用アルゴリズム(Sum)を書いてみます。 using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace DynamicSample { class Program { /…

The fly

C#

Serializeを使ったコードを書いていて、readonlyなフィールドをNonSerializedにしたらどうなるか気になりました。 using System; using System.Collections.Generic; using System.IO; using System.Runtime.Serialization.Formatters.Binary; using System.…

列挙型とswitch文

C#

仕事でコードを書いていて、アレ?っと一瞬悩みました。 static void Foo (MessageBoxIcon icon) { switch (icon) { case MessageBoxIcon.Information: break; case MessageBoxIcon.Warning: break; case MessageBoxIcon.Exclamation: break; case MessageBo…

DataTable.Select vs LINQ

C#

LINQによってデータ取得をSQLっぽく出来るようになったので、DataTable.Selectのようなメソッドは必要なのか?と、ふと思いパフォーマンス比較をしてみることに。

DynamicObjectのパフォーマンス

C#

通常のメソッド呼び出しよりもDynamicObjectのメソッド呼び出しの方が遅いのは当然ですが、どの程度違うのか実験君。