2009年7月20日月曜日

クラスのプロパティを取得する。

クラスからプロパティの一覧を取得する方法です。

--------------------
using System.Reflection;

// クラスの定義
class TestData {
public Text{get; set;}
}

// 任意の関数に以下をコピー。
Type t = typeof(TestData);
PropertyInfo[] propertyies = t.GetProperties();

foreach(PropertyInfo info in propertyies)
{
Console.WriteLine(info.Name);
Console.WriteLine(info.CanRead);
Console.WriteLine(info.CanWrite);
}
--------------------


同様にメンバを取得するメソッドもありますので、
クラスの型が判ればメンバを取得するのは簡単に出来ます。


.

2009年5月22日金曜日

Firefoxのアドオン作成アドオン

jetpackというアドオンを使うことで、
今までより簡単にFirefoxのアドオンを作成できるようになりました。

まだ少ししか触っていないけど、
javascriptのライブラリjQueryが使えたり
FireBugと連携していたり。

なかなか凄いやつです。

■jetpack公式
https://jetpack.mozillalabs.com/

.

2009年5月18日月曜日

文字列の数値変換

文字列→数値
数値→文字列
Convertクラスを使うことでどちらも簡単に出来ます。
#2進数変換や16進数変換までも。。。

■数値変換
Convert.ToInt32("01234"); // 1234 10進数
Convert.ToInt32("FF",16); // 255  16進数
Convert.ToInt32("1111",2); // 7  2進数

■文字列変換
Convert.ToString(1234);// "1234"  10進数
Convert.ToString(255, 16);// "FF" 16進数
Convert.ToString(7,2);// "1111"  2進数

気をつけないといけないのは
変換に失敗した場合、Exceptionが発生するのでCatchしておく必要があります。


■例外が発生しない 文字列→数値変換
※各クラスのTryParseメソッドを使います。

Int32 number;
if (Int32.TryParse("1234, out number) == true){
// 変換成功
} else {
// 変換失敗
}

.

2009年4月26日日曜日

XMLの設定ファイル

設定ファイル作成に良く使っているクラスなので公開っと。
XMLシリアライズ

---------

using System;
using System.Collections.Generic;
using System.Text;
using System.IO;
using System.Xml.Serialization;

namespace SettingData
{
public class MyXmlSerializer
{
public void Serialize(T settingdata, string fileName)
{
XmlSerializer serializer = new XmlSerializer(typeof(T));
using (FileStream stream = new FileStream(fileName, FileMode.Create))
{
serializer.Serialize(stream, settingdata);
}
}

public T Deserialize(string fileName)
{
if (File.Exists(fileName) == false)
{
throw new FileNotFoundException("ファイルが見つかりません、設定ファイルの読み込みに失敗しました。", fileName);
}

XmlSerializer serializer = new XmlSerializer(typeof(T));
T settingdata;
using (FileStream stream = new FileStream(fileName, FileMode.Open))
{
settingdata = (T)serializer.Deserialize(stream);
}
return settingdata;
}
}
}
---------



.

2009年4月22日水曜日

SQLite使ってみよー。

SQLiteについて調べたことまとめ。



  • ライセンスはPublicDomain(2009/04/22:現在)

  • 一つのDataBaseを一つのファイルで管理する。

  • ストアドプロシージャーが使えない。

  • 型の制約があいまい。(型が違ってもデータを登録できてしまう)

    ただし、INTEGER PRIMARY KEYだけは例外





今後良さそうなサイトを見つけたら追加してこっと。
■公式サイト。
DLL,ドキュメントのダウンロードができます。
http://www.sqlite.org/

■System.Data.SQLite
SQLite.NETって感じですね。
http://sqlite.phxsoftware.com/


■SQLite Database Browser
SQLiteのデータベースを見るツール
テーブルの作成やレコードの追加もできます。
http://sqlitebrowser.sourceforge.net/


さーてサンプルでも作ってみよと。
.

2009年3月28日土曜日

C#で typedef

ないのかー!
って探したけど。無かった。代替方法はあったよ。

無い理由は
C#では一つのクラスは一つのクラス名ってことみたいで、
typedef は考慮されずにC#の仕様がきまったことだそうです。
将来は typedef が仕様として組み込まれる可能性はありますが。。


代替方法としては、using を使うってこと。
ただし、宣言したファイル内のみでしか使えないのがネック。。

privateな宣言やったらそのファイルのみで良さそうなので、
使えそうやけど。
他のクラスでも使っていたりすると共通性が無くなってしまうので、
混乱しそうですね。


あんまし便利そうには見えない using の使い方でした。
頭の片隅においておこっと。

.

C#Win32APIの構造体を扱う

C#からWin32APIの構造体ここではRECTをとりあげますが、
他の構造体も同じように扱うことが出来ます。

直接C#のRectangleを使えたら。。便利なのに。
とは思いましたが、構造体のメモリ配置などの関係により、
直接Rectangleは使えません。

で、新しく構造体を定義して使うのですが、メモリ配置がネックになってきますので、
メモリ配置(レイアウト)を決める属性をつけて構造体を定義します。

詳しくはMSDNを参照のこと。
■LayoutKind 列挙体

http://msdn.microsoft.com/ja-jp/library/system.runtime.interopservices.layoutkind(VS.71).aspx


構造体の定義が出来れば後はただ使うだけっと。
コードは以下のようになります。
----------------
[StructLayout(LayoutKind.Sequential, Pack = 4)]
public struct RECT
{
public int left;
public int top;
public int right;
public int bottom;
}
[DllImport("user32.dll")]
public static extern void GetWindowRect(IntPtr hWnd, out RECT wndRect);
----------------


こんな感じ。

.

ラベル