2008年03月31日

フィールドの初期化でのサイズ

   このエントリーをはてなブックマークに追加 Clip to Evernote
備忘のためアップします。

以下のように3つのコンストラクタをもったクラスがあるとします。

public class SomeClass {
private int _n = 24;
private string _s = "visual studio 2008";
public SomeClass() {
}
public SomeClass(int n) {
_n = n;
}
public SomeClass(int n, string s) {
_n = n;
_s = s;
}
}

この場合、インスタンスフィールドである、_n と _sは、
どこで初期化されるかというと、3つのコンストラクタの先頭で初期化されます。

つまり、

public class SomeClass {
private int _n = 24;
private string _s = "visual studio 2008";
public SomeClass() {
_n = 24;
_s = "visual studio 2008";
}
public SomeClass(int n) {
_n = 24;
_s = "visual studio 2008";
_n = n;
}
public SomeClass(int n, string s) {
_n = 24;
_s = "visual studio 2008";
_n = n;
_s = s;
}
}

と書いたのと同じになります。
コンパイル時に、コンストラクタの最初に初期化コードが挿入されるということです。

実は、この初期化コードを一か所にする方法があります。
キーワード this の出番です。

public class SomeClass {
private int _n;
private string _s;
public SomeClass() {
_n = 24;
_s = "visual studio 2008";
}
public SomeClass(int n) : this() {
_n = n;
}
public SomeClass(int n, string s) : this() {
_n = n;
_s = s;
}
}

フィールドは宣言だけにして、初期化コードは、引数なしコンストラクタで行い、引数ありコンストラクタでは、 this() を使って、明示的にコンストラクタを呼び出してあげます。
  

Posted by gushwell at 20:00Comments(2)TrackBack(0)

2008年03月27日

ZoomIt、これはいい!

   このエントリーをはてなブックマークに追加 Clip to Evernote
これはイイ!
ホットキー一発で画面を拡大できるし、その後も、マウスでズームイン、ズームアウトができるし、マウスで「赤線を引く」こともできます。
プレゼンに最適ですね。

マイクロソフトの Technetのサイトからダウンロードできます。
http://technet.microsoft.com/en-us/sysinternals/bb897434.aspx

  
Posted by gushwell at 20:21Comments(2)TrackBack(0)

2008年03月25日

Actionデリゲート

   このエントリーをはてなブックマークに追加 Clip to Evernote
今まで、
delegate void Function();
といったデリゲートを定義していたけど、

public delegate void Action()

というデリゲートが、System名前空間にあったんですね。

値を返さないのに、Functionという名前を付けていた僕...
  
Posted by gushwell at 20:21Comments(2)TrackBack(0)

2008年03月24日

delegateの呼び出し

   このエントリーをはてなブックマークに追加 Clip to Evernote
delegate void Function();

Dictionary<string, Function> dict = new Dictionary<string, Function>();
for (int i = 0; i < 100; i++) {
string s = i.ToString();
dict.Add(s, () => Console.WriteLine(s));
}

というコードに対し、

Function f = dict[s];
f();



dict[s]();

は、まったく同じ結果となるが、実行速度は後者の方がわずかに早いようだ。
僕が試した範囲では、Releaseモードでビルドしても、前者のコードが、
後者と同等のコードにコンパイルされることは無かった。

僕は、前者の書き方の方がわかりやすいので好きなんだけど...
場合によっては、後者の書き方をしないといけないな。
  
Posted by gushwell at 21:32Comments(0)TrackBack(0)

2008年03月23日

メルマガ読者数1500名突破

   このエントリーをはてなブックマークに追加 Clip to Evernote
メルマガ「C#プログラミングレッスン」の読者数が1500名を突破しました。
2004年8月に創刊し、約3年半での達成です。

読者数の伸びが、メルマガ継続のモチベーションになっています。
購読していただいている皆様ありがとうございます。

  
Posted by gushwell at 22:41Comments(2)TrackBack(0)

2008年03月22日

C#プログラミングレッスン・バックナンバー

   このエントリーをはてなブックマークに追加 Clip to Evernote
Gushwell's C# Programing Page --「窓際プログラマーの独り言」別館で、メールマガジン『C#プログラミングレッスン』のバックナンバーを公開していますが、「文法・落穂ひろい編」,「続オブジェクト指向編」,「.NET Framework 基礎編」,「C#2.0文法編」,「ファイル・フォルダ編」,「Debug, Trace編」 の誤字、脱字, コードの誤り等を修正しました。
ご指摘くださった いしだ様、ありがとうございました。  
Posted by gushwell at 14:57Comments(0)TrackBack(0)

2008年03月11日

LINQ to SQLで便利だと思うところ。

   このエントリーをはてなブックマークに追加 Clip to Evernote
O/Rデザイナーが自動で生成してくれるエンティティクラスには、テーブル間のリレーションが、そのままクラス間のリレーションとして表現されているので、クエリ式を書く場合にも、これが利用できる。

リレーションを使わないと、2つのテーブルを結合するのに、C#3.0だと、

 var query = from o in db.Orders
join c in db.Customers on o.CustomerID equals c.CustomerID
where c.City == "London"
select new {
o.OrderID, o.OrderDate, c.CompanyName
};

と書くことになると思うが、

リレーションを使うと、

 var query = from o in db.Orders
where o.Customer.City == "London"
select new {
o.OrderID, o.OrderDate, o.Customer.CompanyName
};

と書ける。
SQLの弱い僕には、ものすごくありがたい機能だ。
どんなSQLが生成されるのかは、

db.Log = Console.Out;

としておけば、確認できる。
  
Posted by gushwell at 21:14Comments(0)TrackBack(0)

2008年03月10日

「C#プログラミングレッスン」 プロセス・スレッド編

   このエントリーをはてなブックマークに追加 Clip to Evernote
Gushwell's C# Programing Page --「窓際プログラマーの独り言」別館で、メールマガジン『C#プログラミングレッスン』のバックナンバー「プロセス・スレッド編」をダウンロードできるようにしました。

.NET Framework2.0で追加されたBackgroundWorkerクラスを使った非同期処理についても説明しています。
また、スレッド間での同期処理につても基礎的なことを説明しています。  
Posted by gushwell at 21:19Comments(0)TrackBack(0)