2013-02-01から1ヶ月間の記事一覧

Actionでデリゲート

C#

プログラミングC# 第6版 5.2 引き続きデリゲートの話です。Actionというのはジェネリック型というものらしいです。今まででも既にListとか登場してましたね。でActionを使ってデリゲートとのことなんですが、まずジェネリックについて先に説明してくれないん…

オブジェクトメソッドでもデリゲート

C#

プログラミングC# 第6版 5.1 前回の記事で関数をデリゲートで呼ぶ処理を勉強しましたが、関数だけでなくオブジェクトのメソッドすらもデリゲートとして登録することができます。 using System; delegate void CDelegateClass (int i); class Hoge { public s…

機能が同じなら一緒に扱え、デリゲートによる関数合成

C#

プログラミングC# 第6版 5.1 デリゲートというものが出てきました。本では長々と説明があったのですが、要するにC++でいうところの関数ポインタってところですね。否。その認識は間違いです。確かに関数ポインタに似てるんですが、実際はちょっと違います。…

abstractに似てる?interfaceとabstractの違いの話

C#

プログラミングC# 第6版 4.10 interfaceの話がでてきました。これは一見するとabstractに非常によく似ています。 using System; // インターフェイス interface IClass { // 派生側でFooを実装することを強制する void Foo (); } class CClass : IClass { pu…

実行時の型を確認する方法

C#

プログラミングC# 第6版 4.12 実行時に型を取得する方法です。これは例えば色々なクラスを一旦object型の配列に格納した後に、そこから元の型に戻して処理を実行させる時などに使えます。 using System; class CClassA { public void Foo () { Console.Write…

すべての型はObjectから派生している

C#

プログラミングC# 第6版 4.8 なんと全ての型は暗黙のうちにobject型から派生しているそうです。 class CClass { } class Program { static void Main () { // objectから派生しているので代入できる object cobj = new CClass(); } } しかもintのようなデー…

オーバーライドされた基底クラスのメソッドの呼び出し方

C#

プログラミングC# 第6版 4.5 メソッドを派生クラスでオーバーライドした時に、基底クラスのオーバーライドされたメソッドをどうやって呼び出すかという話。 using System; class CBase { public virtual void Foo () { Console.WriteLine("CBase.Foo"); } } …

internalアクセス修飾子

C#

C++にもあるアクセス修飾子ですが、C#にはprivate,public,protectedの他にinternalというアクセス修飾子があります。同一プロジェクト内でだけアクセスのできる修飾子みたいです。どういうことかというと、同一プロジェクト内であればpublicとまったく同じと…

virtualとoverrideによるメソッドの上書き

C#

プログラミングC# 第6版 4.3.2 さてここもC++経験者は注意が必要です。virtualの動作がC++とC#で少し違います。まずは以下の例を確認してみます。 using System; class CBase { // 基底クラスのメソッドにvirtualをつける public virtual void Foo () { Cons…

継承とnewキーワード

C#

プログラミングC# 第6版 4.3.1 継承の仕方はC++とほぼ変わらないですね。ひとつC++とは違い、注意する点がありました。以下のコードです。 using System; class CBase { public void Foo () { Console.WriteLine("CBase.Foo"); } } class CClass : CBase { p…

オブジェクト初期化子

C#

プログラミングC# 第6版 3.7 オブジェクト生成時に生成側でオブジェクトの初期化のための処理を行うことができるというものみたいです。 using System; class CSample { public int foo; public int bar; } class Program { static void Main () { // オブジ…

オプション引数と名前付き引数

C#

プログラミングC# 第6版 3.6.1 メソッドの引数はオプション引数にすることができます using System; class CSample { public void Foo (int i, int j=1, int k=2) { Console.WriteLine(i+j+k); } } class Program { static void Main () { CSample cobj = ne…

抽象基底クラス、abstract

C#

プログラミングC# 第6版 4.7 class宣言をするときにabstractをつけると、派生してからじゃないとオブジェクトが生成できないようになります。 using System; // abstractをつける abstract class CClass { } class Program { static void Main () { CClass c…

派生を断固許さない。それがsealed

C#

プログラミングC# 第6版 4.6 「派生を禁ずる!」まるでヒョウが言いそうな台詞ですね。とまぁそれはさておき、classを宣言するときにsealedとつけると、そのクラスから派生クラスを禁じることができます。 // sealedをつける sealed class CBase { } class C…