ブログ 2016/12/23 小ネタ C# と他の言語との差というと C#で、「他の言語との差というと」とか「他の言語から来たばかりの人が書きがちなコード」みたいなことを聞かれた場合、まず何が思い浮かぶでしょう。 C#に馴れちゃってる人だと、LINQとかasync/awaitとかの機能が最初に浮かんだりします。でも、この辺りは「大きな機能」過ぎて、知ってるか知らないかの二択、1度知れば検索してすぐに解説が出てくる類で、かえって問題にならないという印象。 案外、困るのはもうちょっと細かい部分じゃないかと思います。 みたいなのが今日の話題。 辞書(ハッシュテー… 続きを読む 2016/12/22 小ネタ 引数の個数の上限 引数の個数に制限があること、ご存じでしょうか。 むやみに多くても実装上の無駄が大きかったりしますし、上限が決まっていたりします。 C#は意外と大きくて、最大で65536個まで行けます。要するに2バイト分。 ということで、以下のC#コードはコンパイル可能です。 1バイトで収まらない、0~256までの257個の引数。 class Program { static void M( int x0, int x1, int x2, int x3, int x4, int x5, in… 続きを読む 2016/12/21 小ネタ string型のマーシャリング 数値や文字列の内部形式は、プログラミング言語ごとに違っています。プログラミング言語をまたいで値を受け渡しするには、その間に変換処理が必要になります。その変換処理のことをマーシャリング(marshalling: 整列する(特に、指揮官の指示で整列、集結、先導されるような意味あい))と言います。 無変換転送 といっても、変換処理はそれなりに重たい処理なので、異なるプログラミング言語間でも揃えられる限りには同じ形式を使って、そのまま値を渡せるようにしたくなるものです。C#では、Windows AP… 続きを読む 2016/12/20 小ネタ privateメンバーはAPIの一部か ことの発端 なんかぐらばくさんとこので、エラーになるはずのコードがPCLなプロジェクトでだけビルド通ってしまって問題になってたらしい。 要点を抜き出すと以下のような感じ。 using System; struct DateTimeWrapper { DateTimeOffset t; public DateTimeWrapper(int i) { // t を初期化しないとコンパイル エラーになるはず // でも、なぜか PCL プロジ… 続きを読む 2016/12/19 小ネタ プリミティブ型 .NETには「プリミティブ型」とかいうものがあるんですが、 何をもってプリミティブと言えるのか、 どういう型がプリミティブ型なのかというと、 なんかよくわからない存在です。 Type型にIsPrimitiveというプロパティがあって、こいつがtrueを返すものがプリミティブ型なんですが。 以下のコードを見ての通り、どういう基準なのかがパッと見でわからず。 using static System.Console; class Program { static void… 続きを読む 新しい投稿へ 過去の投稿へ
2016/12/23 小ネタ C# と他の言語との差というと C#で、「他の言語との差というと」とか「他の言語から来たばかりの人が書きがちなコード」みたいなことを聞かれた場合、まず何が思い浮かぶでしょう。 C#に馴れちゃってる人だと、LINQとかasync/awaitとかの機能が最初に浮かんだりします。でも、この辺りは「大きな機能」過ぎて、知ってるか知らないかの二択、1度知れば検索してすぐに解説が出てくる類で、かえって問題にならないという印象。 案外、困るのはもうちょっと細かい部分じゃないかと思います。 みたいなのが今日の話題。 辞書(ハッシュテー… 続きを読む
2016/12/22 小ネタ 引数の個数の上限 引数の個数に制限があること、ご存じでしょうか。 むやみに多くても実装上の無駄が大きかったりしますし、上限が決まっていたりします。 C#は意外と大きくて、最大で65536個まで行けます。要するに2バイト分。 ということで、以下のC#コードはコンパイル可能です。 1バイトで収まらない、0~256までの257個の引数。 class Program { static void M( int x0, int x1, int x2, int x3, int x4, int x5, in… 続きを読む
2016/12/21 小ネタ string型のマーシャリング 数値や文字列の内部形式は、プログラミング言語ごとに違っています。プログラミング言語をまたいで値を受け渡しするには、その間に変換処理が必要になります。その変換処理のことをマーシャリング(marshalling: 整列する(特に、指揮官の指示で整列、集結、先導されるような意味あい))と言います。 無変換転送 といっても、変換処理はそれなりに重たい処理なので、異なるプログラミング言語間でも揃えられる限りには同じ形式を使って、そのまま値を渡せるようにしたくなるものです。C#では、Windows AP… 続きを読む
2016/12/20 小ネタ privateメンバーはAPIの一部か ことの発端 なんかぐらばくさんとこので、エラーになるはずのコードがPCLなプロジェクトでだけビルド通ってしまって問題になってたらしい。 要点を抜き出すと以下のような感じ。 using System; struct DateTimeWrapper { DateTimeOffset t; public DateTimeWrapper(int i) { // t を初期化しないとコンパイル エラーになるはず // でも、なぜか PCL プロジ… 続きを読む
2016/12/19 小ネタ プリミティブ型 .NETには「プリミティブ型」とかいうものがあるんですが、 何をもってプリミティブと言えるのか、 どういう型がプリミティブ型なのかというと、 なんかよくわからない存在です。 Type型にIsPrimitiveというプロパティがあって、こいつがtrueを返すものがプリミティブ型なんですが。 以下のコードを見ての通り、どういう基準なのかがパッと見でわからず。 using static System.Console; class Program { static void… 続きを読む