C#

混乱

C#(.net)の場合、型がAbstractかどうかを判断するのかは、Type型のプロパティを調べることで簡単にできるので、JavaのClassクラスでも全く同様にできると思ったのだが、それらしいメソッドが全く見あたらない。結局の所Modifierクラスを使えばできるのだが、…

C#の不幸

信じられないだろうが VB.NETはクライアントを書く言語、C#はサーバやミドルウェア、制御系を書く言語※ と本気で信じている人が、私の周りには未だに結構いるのである。マイクロソフトが一時そのようなマーケティングをしたからか、それとも業界のマスコミが…

delegateの引数省略とLambda

今更何をと思うが、Javaから.NET C#に戻って思うのは、匿名メソッド(匿名デリゲート)が楽しいってことだ。C#2.0から使えるようになったこの機能を使えば、従来はわざわざプレースホルダを用意してやる必要があったイベントハンドラ等を直接且つ直感的に書け…

冗長?、情調?

artonさんの昨日のエントリより。 public class FooBar : IEnumerable { public IEnumerator GetEnumerator() { yield return bar++; } IEnumerable.IEnumerator GetEnumerator() { return GetEnumerator(); } } C#の場合、IEnumeratorとIEnumeratorは違う型…

HttpWebRequest#GetRequestStreamで初回必ず例外(その2)

結局、IPv6の接続時に例外が発生するのは避けられていない。 Uri uri = new Uri("http://hoge"); HttpWebRequest httpRequest = (HttpWebRequest)HttpWebRequest.Create(uri); httpRequest.ServicePoint.BindIPEndPointDelegate = delegate(ServicePoint ser…

HttpWebRequest#GetRequestStreamで初回必ず例外

.NET 2.0環境、Windows Vista上でデバッグしていて気がついたのだが、イントラネット上のWebサーバに、表題のクラス#メソッドで接続しにいくと、必ず初回に例外が発生する。 "対象のコンピュータによって拒否されたため、接続できませんでした。 XXXX::XXXX:…

下手に似ているだけに

JavaとC#をいったり来たりしてコーディングしているのだが、完全に違うのではなく下手に似ているだけに、ちょっと考え方を変えなくてはならない部分に出くわすと、途端に頭が混乱する。(じじいなのかもなぁ)・Genericsがイレイジャ(Java)と非イレイジャ(C#) …

C#の場合

先日のエントリでは、Javaのアノテーションは属性のデフォルト値を省略することで、結果としてビルド時に必須制約を付けられると書いた。 Javaのアノテーションに纏わる小ネタ C#には同様の機能は無いと思っていたのだが、実際にはなちゃさんにコメントを頂…

erasure

今更な不平。 C#ならAbstractHogeを拡張する型のジェネリックなファクトリは public static T CreateHoge() where T : AbstractHoge, new() { return new T(); } とすっきり書ける。 Javaの場合、ジェネリクスはerasureなので同じ意味で書くためには一つ引数…

DIコンテナ部分の移植

大方完了した。まだすべてのテストが完了した訳では無いが、次のステップに進める段階ということだ。 移植の際に苦労したことをメモしておく。 ジェネリクス 私はジェネリクスデビューがC#2.0だったので、Javaのジェネリクスには相当苦労している。最も困惑…

またインタフェース

インタフェースっていいよなぁ、と数日前に書いたけれど、これがJavaやC#を冗長にしている原因の一つでもあるのだなというのも納得している。 スクリプトの世界で暫く遊んだ後で静的な世界に戻ってくると、クラスを書くのがたまらなくだるく感じるからだ。か…

インタフェース

っていいよなぁやっぱり。ポーティングをしていると特にそう思う。 インタフェースは操作のみが定義、提供されている。Javaだろうが、C#だろうが操作は操作だし。 実装が無くてもビルドは通るしテストもできるから、中身が空のままどんどん作業を進められる…

ブレースと一貫性

Type1(主にC#) if (a == b) { a.SetHoge(b); } else { b.SetHoge(a); } Type2(主にJava) if (a == b) { a.setHoge(b); } else { b.setHoge(a); } C#からJavaへの移植。Type1からType2のブレーススタイルに変更するのが地味に面倒だ。 JavaでType1のスタイル…

Log4netのConversionPatternでミリ秒まで記録する

書式"fff"(フラクタル秒か?)を使う。ConversionPatternはこんな感じ %d{yyyy/MM/dd HH:mm:ss.fff} 表示例 少なくともLog4net-1.2.10ではLogjで使えていたはずの書式"SSS"は使えないようだ。

一日以上の長

JavaはJ2SE6から(正確にはJava Web Services Developer Packから)XML用のAPIとしてStAXと呼ばれる新しいパーサ(プルパーサ)を提供したが、これはC#で既に実装されている同様のパーサと非常に良く似たものである。以下はプルパーサを使ってhoge.xmlを読み込む…

面倒な部分

ロジック自体は内容を確認した上でJavaでどのように実現するかを考えながら書き直すので仕方が無い(というか、これはリファクタリングにもなる意義のある作業だ)が、関係の無い部分、特にコメント等をいちいち書き直していくのが意外に面倒だ。 JavaからC#へ…

損した気分

前にC#ネタでジェネリクスの型パラメタだけが違うクローズ型のスタティックフィールドは共有されるのかという内容のエントリを書いたが、Javaでは期待通りの結果にならないので注意が必要だ。前回のエントリのサンプルコードをJava用に書き換えてみる。 publ…

得した気分

C#で書いたクラスをJavaに書き換えている最中だが、 StringBuilder sb = new StringBuilder(); これはJavaでもそのまま通るのだった。クラス StringBuilder - JavaTM 2 PlatformStandard Ed. 5.0J2SE5からはJavaにも加えられたこのクラスはStringBufferの非…

時が解決すること

Javaでの開発に際していろいろと前向きな事を書いたが、開発の主体が.NETからJavaに戻った時、一番最初に思ったことは ああ...XMLのパースに何使おうかな であった。Javaでサーバサイドの開発をしていた頃はパーサの主流はDOMかSAXだったが、DOMはやたらとメ…

中途半端

に似ていると混乱の元だ。前にも書いた記憶があるが、ジェネリックなメソッドの戻り値の型制約、C#では //C# T Method() where T : MyClass { } だが、Javaではこう書く。 //Java T method() { } 同じ意味なんだけどな。あと、Javaではジェネリクス型は内部…

イベントドリブンの落とし穴

WPFは知らんが、WindowsFormで一番やっかいなバグの原因の一つがこれだ。 主にコントロールが持つ振舞いとWindows Messageの仕様によって、プログラマの意図しない順序でイベントが発生してアプリケーションが予想しない動作をしたり、再現困難な異常動作を…

DAOで使うカスタム属性(その2)

[HasMany] - 1:Nのリレーションを宣言やはりこれは止めようかな。一回のクエリで取得する結果セットの構造を変える(マージ)必要があるしな。

DAOで使うカスタム属性(アノテーション)

途中、何度も「S2.DAOを使えばいいじゃない」という誘惑が入るがめげずに実装中。今まで独自で書いてきただけに、一箇所だけS2ファミリを使う訳にはいかないのだ。(ちょっとだけ後悔している)[Entity] - エンティティを宣言 [Column] - DBの列(カラム)を宣言…

プロパティの適所

アクセサ以外のプロパティは必要か少し考えてみたが、私が最近あまり必要と感じていなかったのはコンポーネント、特にデザイナでポトペタするGUIコンポーネントを書くことが無かったからだろう。コンポーネントを簡単に書けるのはプロパティに因るところが大…

アクセサ以外のプロパティは必要か

Delphiでその便利さに驚き、Javaで提供されていないことを嘆き、C#で使えることに感激したプロパティ(Property)だが、C#でプログラミングする場合、最近ではフィールドをカプセル化するためのアクセサにしかプロパティを使おうとしない自分がいる。プロパテ…

Nullable

先日DAOを実装するのが昔より楽になったのはアノテーションのお陰だと書いたが、.NETの場合、もう一つの立役者はこのNullable Generics Typeだろう。 一般的に値型は空とそうでない値との区別が付かないので、SQL等の問合せ言語を構成する際に扱いが面倒だっ…

キーの大文字小文字比較を無視するジェネリクス辞書

IDictionaryを実装するが、キーとなるstringに関しては大文字小文字の区別をしない辞書をを作りたい。(大体、何に使うか想像が付くだろう) 幸いにも以下のようにそれ用のコンストラクタがGenerics Dictionaryにあったのだが、 public Dictionary (IEqualityC…

シンプルなDAO

必要に迫られて実装開始。アノテーション(.NETで言うところのカスタム属性とメタデータ)のお陰でDAOの実装はかなり楽になった。外部から取り込みが必要だったパラメタやカスタマイズに必要だったコードの大部分を省くことができるようになったからだ。前回書…

Genericsとstatic fields

ふと思ったのだが、ジェネリクスの型パラメタだけが違うクローズ型のスタティックフィールドは共有されるのか、独立しているのか。当然のことながら独立していないと困ったことになるので、多分独立しているのだろうと思ったのだが物は試し。 public class F…

DAO

今更だが、シンプルなDAOを考え中。1.アノテーションで全ての指示を行う(当然設定ファイルレス) 2.SQL至上主義であり、外部SQLを積極的に使う(ファイル又はリソース) 3.基本はO-Rマッピングではなく「オブジェクト-結果セットマッピング」。 4.リレーショナ…