2007年09月30日

「C#プログラミングレッスン」文法・落穂ひろい編

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

「文法:落穂拾い編」では、C#入門編,オブジェクト指向編 で説明できなかった、文法の説明をしています。
readonly, const, ref, out, インデクサ, base, implicit, explicitなどなど...


  

Posted by gushwell at 17:00Comments(0)TrackBack(0)

2007年09月27日

これはどうなんだろう

   このエントリーをはてなブックマークに追加 Clip to Evernote
あるソースを見ていて、うーん、これはどうなんだろうって思った。
それは、とても似たデータベースのテーブルがあり、それをアクセスするメソッドがあるのだが、これがひとつメソッドで実装されている。
そのメソッド内部では、目的別にprivateメソッドを呼び分けている。
使う側は、同じメソッドを呼ぶわけだが、内部では、その引数によって、処理が分岐している。

たしかに、共通部分が多いため、コードの一部は共有しているのだが、どうも、可読性がわるいというか、メンテナンス性が悪いというか。
まあ、汎用的といえば汎用的なんだけど、

呼ぶ側は、どっちの処理をしてほしいかは、明らかなのだから、メソッドを別にしても良いと思う。

それで、似た部分を一つにはできなくなるわけだけれど、無理やり一つにしても、あまりメリットが見えない。



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

2007年09月23日

メルマガ:C#プログラミングレッスン  読者数1300名突破

   このエントリーをはてなブックマークに追加 Clip to Evernote
メールマガジン「C#プログラミングレッスン」の読者数が
1300名を突破しました。

応援してくださっている皆さん、感謝感謝です。

  
Posted by gushwell at 18:16Comments(0)TrackBack(0)

2007年09月19日

C#3.0: 暗黙に型付けされた配列

   このエントリーをはてなブックマークに追加 Clip to Evernote
int[]  a1 = new int[] { 1, 2, 3, 4, 5 };

という記述が、

var  a1 = new int[] { 1, 2, 3, 4, 5 };

となり、

さらには、

var  a1 = new[] { 1, 2, 3, 4, 5 };

と書ける。配列の要素が、 int なので、コンパイラが int[] と判断できるわけだ。

var  s1 = new[] { "abc", "xyz", "123" };

ならば、 string[] だ。
でも、

var  o1 = new[] { "abc", "xyz", 123, 456 };

これは、エラーになる。この場合は、明示的に

var  o1 = new object[] { "abc", "xyz", 123, 456 };

と書く必要がある。
  
Posted by gushwell at 20:23Comments(2)TrackBack(0)

2007年09月18日

Foldではなく、Aggregate

   このエントリーをはてなブックマークに追加 Clip to Evernote
public void Linq92() { 
double[] doubles = { 1.7, 2.3, 1.9, 4.1, 2.9 };

double product = doubles.Fold((runningProduct, nextFactor) => runningProduct * nextFactor);

Console.WriteLine("Total product of all numbers: {0}", product);
}

の Fold メソッドは、Aggregate になった。  
Posted by gushwell at 21:36Comments(0)TrackBack(0)

2007年09月14日

「C#プログラミングレッスン」オブジェクト指向編

   このエントリーをはてなブックマークに追加 Clip to Evernote
メールマガジン「C#プログラミングレッスン」の"オブジェクト指向編"の記事をアップロードしました。

Gushwell's C# Programing Page --「窓際プログラマーの独り言」別館でダウンロードできます。




  
Posted by gushwell at 22:06Comments(0)TrackBack(0)

2007年09月13日

C#3.0:Sequence でなくEnumerable

   このエントリーをはてなブックマークに追加 Clip to Evernote
publicvoid Linq65() { 
var numbers =
from n in Sequence.Range(100, 50)
selectnew {Number = n, OddEven = n % 2 == 1 ? "odd" : "even"};

foreach (var n in numbers) {
Console.WriteLine("The number {0} is {1}.", n.Number, n.OddEven);
}
}

がコンパイルできない。Sequenceクラスなんてないよとエラーになる。
usingが足りないわけではなさそうだ。

Sequenceというのは、古い名前で、ベータ2では、Enumerableに代わってるようだ。
Enumerable に変更して、無事コンパイルできた。


ちなみに、Visual Studio 2008 ベータ2には、Linq 101 Samplesのサイトにあるサンプルコードの最新版が入っている。zip ファイルを展開すれば、そのままビルドが可能だ。

早く気づくべきだった。。。

でも、エラーで悩んだほうが、身に付くので、引き続き、Webページのコードを動かす予定。

  
Posted by gushwell at 22:50Comments(0)TrackBack(0)

2007年09月12日

C#3.0:匿名クラス

   このエントリーをはてなブックマークに追加 Clip to Evernote
その名の通り、名前のないクラスです。
匿名クラスを作るコードは、以下のようになります。

var obj = new { Name = "Gushwell", Id = 123 };

当然、Name, Id にアクセスできます。

Console.WriteLine(obj.Name);
Console.WriteLine(obj.Id);

また、以下の obj, obj2 は、同じクラスとみなされます。

var obj = new { Name = "Gushwell", Id = 123 };
var obj2 = new { Name = "Adam", Id = 456 };
if ( obj.GetType() == obj2.GetType() )
Console.WriteLine("Same Type");

名前がないため、他のメソッドに引き渡すなどの用途には向いていません。  
Posted by gushwell at 20:48Comments(0)TrackBack(0)