今じゃすっかり C#er ?

C++ と C# を比べて・その1 - かおるんダイアリー
C++ と C# を比べて・その2 - かおるんダイアリー

今じゃすっかり C#er になりつつある自分が反応しますよ、っと。

C# では型変換がめんどう? X(

C# で byte 列とか弄ったことないのでパス><

C# は型の制約が厳しい? X(

型変換の話にもなるけど、C# では byte から sbyte とか変換ができない??

C++ と C# を比べて・その1 - かおるんダイアリー

byte(0〜255) から sbyte(-128〜127) に変換できたらまずいと思うんだけど・・・
そもそも、sbyte とか出来る限り使いたくない。Java の byte は・・・残念です。

C#インスタンスの生存範囲が見えづらい? X(

C++ の感覚でファイルやらポートやらをスコープが抜けた瞬間に Close とかが普通にできず、using で囲わないといかんのでめんどくさい。

C++ と C# を比べて・その1 - かおるんダイアリー

ここは C++ が素敵すぎる。
C++ の RAII は是非他の言語も見習うべき!

C# で多重継承ができないのが・・・ X(

たまに mixin とかで使いたくなる多重継承ができない。
interface に拡張メソッドでそれっぽくはできるみたいだけどそれはちょっと。。。


せめて「ひし形継承ができない」くらいにしてくれれば。。。

C++ と C# を比べて・その1 - かおるんダイアリー

C# で多重継承ができなくて困ったことがないんだよなぁ・・・
interface に拡張メソッドで個人的には十分です><

typedef がない・・・ X(

どうでもいいっちゃどうでもいいけど、ジェネリックをサポートするなら typedef みたいなのもサポートしてくれないと、型名が長っちゃう。。。
using よる別名もスコープがファイルなのでいまいちだし。

C++ と C# を比べて・その1 - かおるんダイアリー

これは弱い typedef の話ですね。
それなら、var なんていかがでしょうか?

var d = new Dictionary<int, List<string>>();

どこでも使えるわけじゃないけど、ローカルでは使えるのでほとんど問題なし。

# いつも var を auto と打ってしまうのは内緒

似て非なる機能が多い・・・ X(

  • キャストと is(例外と null )
  • キャストと as(例外と null )
  • const と readonly(定数と変数)
C++ と C# を比べて・その1 - かおるんダイアリー

あとは・・・

  • ref と out
  • class と struct
  • 文字列リテラルと逐語的文字列リテラルのエスケープ方法
  • int と Int32、string と String などなど

とか?
でも、is は null じゃなくて、キャストが可能かどうかを確かめるだけ。
直後でキャストした値が使いたいことがほとんどだから、is じゃなくて as で実際にキャストを試してみて、null かどうかで振り分けることの方が多いかなぁ。


あ、Int32 は using System; しないと使えないって意味で似て非なる。
まぁ、System.Int32 とすればいいって話ではあるけどね。

キャスト多すぎ・・・ X(

ジェネリックがない時の名残か、コンテナが object を格納するので、キャストが多い。

C++ と C# を比べて・その1 - かおるんダイアリー

そこはジェネリック対応のコレクションを使えばいいですよ。
System.Collection.Generic 名前空間以下にお望みのクラス群があるはずです。

参照ベースってステキ:)

C# は参照ベースなので、インスタンスを戻り値で戻してもコストがかからない。
なので、戻り値のインスタンスからメソッドを呼ぶ書き方が C++ よりも多くの場所でできる。

C++ と C# を比べて・その2 - かおるんダイアリー

確かに、C++03 だとスマートポインタでラップして返すとかだるいですね・・・
そこで C++0x の出番です!右辺値参照を使えば幸せになれる!はず!
とりあえず、ぶつぶつ会のまとめをどうぞ。


関数型言語に近いかどうかは・・・ノーコメントで><

インテリセンスが賢すぎ:)

正直、Eclipse の方が個人的には好きです・・・
MS は前に使ったメソッドとかにカーソルが合った状態でポップアップするんだけど、Eclipse はもうちょっと空気を読んでくれるというかなんというか。
まぁでも、C# でも Java でもインテリセンス無しとかもうありえませんね。IDE 万歳!

いろんなツールとの連携がしやすい:)

確かに、SCM 的なツールとの連携はしやすいですねー。

コンポーネントがそろってる:)

MS-Office にしろ、XML-RPC にしろ、Wii リモコンにしろ、遊べるツールが多い。

C++ と C# を比べて・その2 - かおるんダイアリー

応用的なコンポーネントは豊富なんだけど、Commons みたいなものが欠けてる気はする。
そもそも、Java で Commons が欲しいと思うのは、標準ライブラリが貧弱だからなんだけど、C# は貧弱じゃないか、って言うと・・・


昔は C# を毛嫌いしてたんだけど、約一年使い続けたら手になじむものだねぇ・・・
あと、C# をやったなら PowerShell もやるといいと思う。
Windows 7 や Windows Server 2008 からは標準搭載だし。