タグ

ブックマーク / csharptan.wordpress.com (5)

  • コレクションの内部実装

    昨日に引き続きコレクションの話なの、とC#たんはC#たんは前振りしてみる。 今日はコレクションの中身がどうなっているか、実装についてです、とC#たんはC#たんは説明してみたり。 配列リスト 個数不定のデータを持つための一番手っ取り早い方法は、事前に配列を確保しておいて、状況に応じて確保しなおす方法です。 List<T>やStack<T>で内部的にやってることはほぼこれだけです。その他のコレクションでも、この手の仕組みはよく使います。 要は、配列と、実際に何個目まで要素が詰まっているかを表す変数countを持ちます。 要素を追加するたびに、countを増やします。 配列がいっぱいになったら、新しい配列を確保して要素をコピーします。 要素のコピーはそれなりに高負荷なので、要素の最大数がだいたいわかってる場合は、事前に確保する配列の長さをコンストラクターに渡しておきます(capacity引数)。

    コレクションの内部実装
    mntone
    mntone 2013/07/22
  • 動的処理

    今日のテーマは動的(dynamic)です。 最初に注意しておきたいのは、動的と言っても何を動的に行うか、いろんなやり方があって、いろんな用途があります。動的ローディング、動的コード生成、動的型付けなどなど、「動的~」の「~」の部分をちゃんと考えましょう。 動的ローディング 既知の型を、未知のDLLから読み込みます。 例えば以下のような感じ。System.Reflection.AssemblyクラスのLoadメソッドなどを使ってDLLを読み込んで、System.Activator.Createメソッドでインスタンスを作ります。 インスタンスを作る部分だけ面倒ですが、一度インスタンスを作ってしまえば、あとは普通に(特に苦労することなく)使えます。 用途1: プラグイン プラグイン、つまり、アプリ体とは別の第3者がアプリへの拡張機能を提供する場合、まさに、既知の型を未知のDLLから読み込むこと

    動的処理
    mntone
    mntone 2013/05/28
  • 単体テスト

    プログラミング始めたての初心者、特に学生さんが相手だったりする場合、いつもこう言っています: Visual Studio、まずは無料版のExpressでいいですよ。商用利用も可能です。C#に関していうと、コンパイラーの性能制限みたいなのもないです。 さて、じゃあ、こんな疑問も浮かぶかと思います: なんで有償版があるの?それでなんでみんなProfessionalを買うの? その答えの1つが、今日お話しする単体テストです。ということで、今日のお話は、Express版では試せなかったり…。逆に、普段からProfessionalよりも上のグレードを使いこなしてる人には少し退屈かも。 下準備: 今回のテスト対象 今日はベタに、簡単な計算をするメソッドを作って、それの単体テストをしてみましょう。 とりあえず、物自体(つまり、テストの対象)を作ります。UIも何もなし、ライブラリだけ作りましょう。名前は、

    単体テスト
    mntone
    mntone 2012/06/25
  • ネイティブと.NETと

    DynamicのついでにILの話したついでに、ネイティブと.NETの対比の話もしましょうか。 ここでいうネイティブは、実CPUのネイティブ コード(を直接出力するC++などの言語)のことです。 ネイティブか.NETか、それが問題だ 嘘です。 「AかB、どっちがいい?」って質問の答えは、往々にして「両方」です。残念ながら。毎回毎回、「これ1つですべてを解決!」みたいな銀の弾丸を期待しては、毎回毎回、夢物語に終わるのです。 アプリは.NET(C#とか)で書いた方が楽。それは間違いないです。一方で、インフラ的なところ、データベースやらGUIフレームワークみたいなのの内部はネイティブで書いた方が楽。場合によってはネイティブで書かざるを得ません。極度のパフォーマンスが必要な場面では、.NETで書く方が却って大変になることが多いです。 結局、適材適所としか言いようがないです。じゃあ、それぞれどこが適所

    ネイティブと.NETと
    mntone
    mntone 2012/01/04
  • コレクション

    ちょっといったんTIPS系に話を戻しましょうか、とC#たんは心境を述べてみます。 日のテーマはコレクションについて。どういうコレクションがあって、どういう場面に使うのか、とC#たんは日の説明を開始します。 明日、内部的な実装に踏み込んでみましょうか、とC#たんは考えています。 .NETのコレクション C#というか、.NETには、標準でいろんなコレクションが用意されています。今回はこれらの紹介と、内部的なアルゴリズムについて簡単に説明していきます。 ジェネリック版と非ジェネリック版 歴史的な背景から、.NETのコレクションには2系統のものが存在します。

    コレクション
    mntone
    mntone 2011/12/20
    こことてもわかりやすい。
  • 1