「C# エッセンシャルズ」まとめ その1
 「C#エッセンシャルズ」について、というよりも、C# そのものの言語仕様について、個人的に「おっ」と思った部分についてのまとめメモ。このペースでいくと、全3-4回ぐらいになりそう。

verbatim文字列リテラル (p.15)

 Stringリテラルの先頭に @ をつけると「verbatim文字列リテラル」として取り扱われる。\ などのエスケープ文字が含まれていても、そのままの内容として扱われる。

public void StringDemo() {
string a1 = "\\\\server\\fileshare\\helloworld.cs";
string a2 = @"\\server\fileshare\helloworld.cs";
Console.WriteLine(a1 == a2); //=> True

string b1 = "First Line\r\nSecond Line";
string b2 = "First Line
Second Line";
Console.WriteLine(b1 == b2); //=> True
}

 Perl や Ruby のシングルクォートで囲まれた文字列みたいなものか。


using ステートメント (p.32)

 ruby の ブロックを使った open みたいなことが C# でもできる。
using (FileStream fs = new FileStream(fileName, FileMode.Open)) {
// fs に対する処理
}

 usingステートメントを使うと、IDisposableインターフェースを実装する変数の Dispose メソッドが自動で呼び出される。
 上のコードは、次のコードと全く同じとの事。
FileStream fs = new FileStream(fileName, FileMode.Open);
try {
// fs に対する処理
}
finally {
if (fs != null)
((IDisopsable)fs).Dispose();
}


2.7.3 仮想関数メンバ (p.37, 38)

 オーバーライドされる関数メンバは「virtual」キーワードで宣言する。オーバーライドする側は「override」キーワードを指定する。
class Location {
// オーバーライドされる関数メンバ
public virtual void Display() {
Console.WriteLine(Name);
}
}

class URL : Location {
// Location クラスの Display メソッドをオーバーライド
public override void Display() {
// 先頭の http:// を切り捨て
Console.WriteLine(Name.Substring(7));
}
}



2.7.6 継承したメンバを隠す機能 (p.39, 40)

 new キーワードの、コンストラクタ呼び出し以外の機能。
using System;
class B {
public virtual void Foo() {
Console.WriteLine("In B.");
}
}

class D : B {
public override void Foo() {
Console.WriteLine("In D.");
}
}

class N : D {
// Dクラスの Fooメソッドを隠す
public new void Foo() {
Console.WriteLine("In N.");
}
}

class Test {
public static void Main() {
N n = new N();
n.Foo(); //=> "In N."
((D)n).Foo(); //=> "In D."
((B)n).Foo(); //=> "In D."
}
}

 ちょっと、使いどころがまだよくわからないな。


2.9.3 フィールド、2.9.4 定数 (p.45, 46)

 フィールドに readonly 修飾子をつけると、読み取り専用フィールドとなり、値を割り当てた後にそれを修正する事ができなくなる。「readonly」は実行時に評価される
class MyClass {
int x;
float y = 1, z = 2;
static readonly int MaxSize = 10;
}


 「const」で定数を宣言する。コンパイル時に評価され、暗黙的に静的になる。コンパイル時に評価されるので、コンパイラによる最適化が行われる。
public static double Circumference(double radius) {
return 2 * Math.PI * radius;
}
は、最適化されて、次のように評価される。
public static double Circumference(double radius) {
return 6.28318530717959 * radius;
}


次回へ続く。
[PR]
by fkmn | 2009-04-06 23:55 | IT
<< 「C# エッセンシャルズ」まと... C# 始めました >>


とあるWebアプリケーションエンジニアの日記
S M T W T F S
1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30
カテゴリ
以前の記事
ブログパーツ
リンク
検索
タグ
最新のトラックバック
プログラミングが「出来る..
from とりあえず9JP?
Genographic ..
from ナンジャモンジャ
ジュセリーノ
from ありの出来事
くちこみブログ集(ライフ..
from くちこみブログ集(ライフ)(..
以降、丁寧語で行こう!
from エッセイ的な何か
その他のジャンル
ファン
記事ランキング
ブログジャンル
画像一覧

fkmnの最近読んだ本 フィードメーター - フッ君の日常 あわせて読みたい AX