2010年2月23日火曜日

[.NET]乱数を扱う

.NET Frameworkでは乱数を発生させる仕組みとして、Randomというクラスが提供されています。
しかし、このRandomというクラスは、Donald E. Knuth の乱数ジェネレータ減算アルゴリズムに基づいています。・・・アルゴリズムの詳細はよくわかりませんが、なんでもある演算とシード値(引数)を使って擬似的な乱数を生成するようです。
擬似乱数であるため、完全ではないようで、完全な乱数?するには、.NET Frameworkでは、RNGCryptoServiceProviderというクラスが用意されています。
このクラスは、乱数ジェネレータ(Random Number Generator) の実装らしく、Randomよりは正確な乱数を生成することができるようです。で、使ってみました。コードはこんな感じ。

private void button1_Click(object sender, EventArgs e)
{
    //using System.Security.Cryptography;

    //32bitの数値用に4byteバッファを確保
    byte[] bytes = new byte[4];

    //暗号乱数ジェネレータでバイト列を生成
    RNGCryptoServiceProvider rng = new RNGCryptoServiceProvider();
    rng.GetBytes(bytes);

    //byte列を数値に変換
    textBox1.Text = BitConverter.ToInt32(bytes, 0).ToString();

}

2010年2月15日月曜日

[.NET]refとoutと値渡し

私は、VOではない引数を更新するインタフェースがキライです。とくにVB.NETで、ByRefを見かけるとイラっときます。というのも、実行結果はメソッドの戻り値である。という考え方をするからです(あくまで個人的見解です)。値更新の流れを1方向にすることにより、全体的に見通しがよくなる気がします(あくまで個人的見解です)。

しかし、参照渡しと値渡しの違いはわかるんですが、refとoutの違いがよくわかっていませんでした。というわけでちょっと調べてみました。私の理解では以下のとおりです。

 ref:C++でいう参照渡し。呼び出し側でインスタンス生成する必要がある
 out:C++でいうポインタ渡し。呼び出し側でインスタンスの生成が不要

メリットとしては、値渡しの場合、コピーのコストが発生する場合があります(値型の場合だけだっけか?)そういう場合は効果があるかもしれません。
データは汚れるかもしれませんが、基本的にポインタ的な情報のやり取りになるはずなので。

2010年2月13日土曜日

[Silverlight]ASP.NETからのマイグレーション

ASP.NET1.1/.NET Framework1.1の仕事を最初にやってから、5年ほど経過した気がします。
で、過去の経緯から考えた場合、そろそろハードのリース切れのタイミングでもあり、こんな時代じゃなければ、システム再構築や変更の仕事の引き合いがきてもおかしくない時期にさしかかってきました。

今、何も考えずにやっても良いよ。となった場合、おそらくASP.NET2.0 or Silverlight + .NET Framework3.5という選択になると思います。ASP.NETを選ぶのであれば、ajax系の仕組みを組み入れることになるでしょうか。

しかし、依存関係から、サーバのOSが変えられそうにないお客様がいくつか思い当たり、その場合どうするかを暇つぶしに考えて見ました。
ajaxでもいいのですが、ASP.NET1.1系で利用できるAJAX Control Toolkitって聞いたこと無い?と思うので別の。。。というとクライアントのUIはSilverlight で、サーバはASP.NET1.1/.NET Framework1.1でasp.netで使っている機能を流用してWebサービス化すれば。。。

・・・えぇまぁ、きてませんよそんな仕事は。

2010年2月2日火曜日

[.NET]C# 静的コンストラクタ

いっつも「あれーどうだっけ?」となってしまう、C#の静的コンストラクタを備忘録としてメモ。

public class Class1
{
    /// <summary>
    /// 静的コンストラクタ。クラス名を同じメソッド名で、static以外の修飾をしない
    /// </summary>
    static Class1()
    {
        //ここに実装
    }
}


あとはMSDN。静的コンストラクタ (C# プログラミング ガイド)

2010年2月1日月曜日

[TOOL]Home Edition(IISの動作しないOSで)ASP.NETの動作確認をする方法

2年ほど前、とくに何も考えず、VistaのPremiumを買ったこともあり、うちのマシンではIISが動きません。
まぁ家でWeb系の開発したければVWD使えば良いし。と思っていたのですが、単に動作だけを見たいときに、VWDを起動するのが億劫になるんですよねぇ。
で、調べてみると、VWD搭載されている開発サーバを単独で動作させる方法が紹介されていました。
VS 2005やIISを使用せずにWebアプリケーションを実行するには
これは2005の例ですが、2008で同様のことができます(2008ではWebDev.WebServer.exeの格納されているフォルダが異なります)。