読者です 読者をやめる 読者になる 読者になる

ジェネリクス

C#

ジェネリクスはC++でいうテンプレートのようなもので、型をパラメータで受け取れるようにすることで、さまざまな型で共通の処理を使うことができる・・・。C++でやったスワップクラスをC#で作る・・・。Swap.csは、クラス名の後にを付けるだけで&ltT>が汎用…

属性

C#

属性は、自作のメソッドやクラスに、既定または独自の機能や情報を付加する仕組み・・・。今回は、自作のメソッドにConditionalAttributeを付ける・・・。ConditionalAttribute クラス (System.Diagnostics)ConditionalAttributeは、前回のような条件付きコ…

#defineディレクティブ

C#

#defineディレクティブは、シンボルを定義するときに使う・・・。 ファイルの先頭にしか定義できない・・・。(コメントとかぐらいは上にあっても大丈夫みたい・・・。usingとかよりは上・・・。)最初に、 // 名前空間の登録 using System; // 共通データ型と…

#ifディレクティブ

C#

C#にもプリプロセスがある・・・。 #ifディレクティブは、指定されたシンボルが定義されているときに、#endifまでのプログラムがコンパイル対象となる・・・。 C言語やC++と違い、マクロの定義ができないので、マクロの値ではなく、シンボルが定義されている…

event

C#

delegate型変数をクラスのメンバフィールドに用意しておけば、コールバック関数を実装できる・・・。 ただ、publicでdelegate型変数を公開すると、直接的に中の関数を実行されてしまう・・・。 かといって、privateにすると、実行するハンドラ関数を登録でき…

マルチキャストデリゲート

C#

デリゲートには、複数のメソッドを登録できる・・・。 これをマルチキャストデリゲートという・・・。デリゲートの追加は、 <デリゲート変数> += new <デリゲート名>(<実行するメソッド>) +演算子や+=演算子を使える・・・。 逆に削除は、 <デリゲート変数> …

delegate

C#

デリゲートは、簡単に言うとメソッドを格納する特殊なオブジェクトで、C言語の関数ポインタ、C++の関数オブジェクトのようなもの・・・。 delegate <戻り値型> <デリゲート名>(<引数型> <引数名>); delegateをつけることで、このような引数型と戻り値型のメ…

インデクサ

C#

インデクサは、プロパティを拡張したようなもので、オブジェクトのメンバに配列のような添字でアクセスできる・・・。 さらに、プロパティと同じく、getとsetでアクセス制限もできる・・・。 オブジェクトの中に、配列やリストのようなコレクションをメンバ…

usingステートメント

C#

これまで、Disposeによるリソース解放は、finallyで手動で行うような形になっていた・・・。 usingステートメントを使うと、IDisposableインターフェイス実装オブジェクトについては、finallyがなくても自動でリソース解放してくれる・・・。CustomReader.cs…

finally

C#

finallyは、tryブロックの中で例外が発生しても発生しなくても実行すべき処理を書く場所・・・。 今回は、2つのファイルを連続して読み込んで内容を出力・・・。 2つ目で例外が発生しても、1つ目のファイルを閉じる処理は実行するような形にする・・・。 Mai…

例外処理

C#

C#の例外処理も、基本的にはJava、C++と同じような感じ・・・。tryブロックで、System.Console.ReadLineで標準入力を読み込み、int.Parseで整数値にして、xに代入する・・・。 (System.Console.ReadLineや、intをクラスみたいに扱える理由とかは、後々で・・…

プロパティ

C#

これまで、privateメンバにアクセスできるメソッドとして"SetXXX"や"GetXXX"などのいわゆるsetter/getterというものを定義してきた・・・。 これらが何故存在するかというと、渡された値を設定時や取得時にチェックして問題があれば別の処理ができるところに…

interface

C#

インターフェイスももちろん作れる・・・。 先頭にinterfaceをつけるだけ・・・。BaseClassを、とする・・・。 iとstrに値をセットするこれまでのもの・・・。ここで数値なら加算、文字列なら連結をするインターフェイスIAddを宣言・・・。また、iとstrそれ…

abstract

C#

C#も抽象クラスを作れる・・・。先頭にabstractとつけると、抽象クラスとなる・・・。 コンストラクタ名やメソッド名を出力しているだけ・・・。ちゃんとした実装は、派生クラスDerivedClassで・・・。 Setだけわざとオーバーライドしていない・・・。抽象ク…

virtual

C#

派生クラスメソッドの定義による基底クラスメソッドの隠蔽はnewで行った・・・。 newでは、派生クラスメソッドが呼ばれるか、基底クラスメソッドが呼ばれるかはインスタンスを代入したオブジェクト変数の型によって決まる・・・。 BaseClass base = new Deri…

new修飾子

C#

いきなり結構飛ぶけど・・・。基底クラスを継承した派生クラスを定義するとき、基底クラスと同じ名前のメンバ(メソッドの場合は引数の数や型も)を定義すると、派生クラスオブジェクトからは派生クラスで定義したメソッドが実行される・・・。 このとき、基底…

foreach文

C#

同じ型のデータを複数まとめたものをコレクションといい、配列もその一つ・・・。 前回は配列から値を取り出すのにfor文を使ったが、配列を含めコレクションならforeach文が使えるので、今回はそれで値を取り出す・・・。配列に値をセットするところまでは同…

配列

C#

配列を定義して、値をセットしたり、値の中身を出力したりしてみる・・・。newで要素数5の配列arrayを生成・・・。arrayの各要素に適当に値を代入していく・・・。for文とConsole.WriteLineで、各要素の値を出力・・・。 array[0] = 7 array[1] = 4 array[2]…

ref

C#

C#で、変数などをメソッドへ参照渡しする場合は、refを使う・・・。2つの変数の値を交換するSwapメソッドを作ってみる・・・。aを10、bを20とする・・・。この時点でそれぞれの値を出力・・・。Swapメソッドを呼ぶ・・・。 参照渡しする場合、変数の前にref…

コンストラクタ

C#

コンストラクタで初期化処理を定義する・・・。引数なしのコンストラクタでは、iを0、strを"-"に初期化する・・・。引数付きのコンストラクタでは、渡されたnをiに、sをstrに代入する・・・。この辺は変わりない・・・。MainClassでは、Class1オブジェクトcl…

クラス

C#

自らクラスを定義し、そのクラスのオブジェクトを使ってみる・・・。Class1クラスを定義・・・。privateメンバのint型フィールドi、string型フィールドstrを準備・・・。整数値と文字列を先程のiとstrにセットするメソッドSetを定義・・・。WriteLineでiとst…

bool型

C#

ここからC#・・・。C#でも真偽値を持つbool型を使える・・・。bool型変数をb1からb3まで用意・・・。 b2はfalseに初期化・・・。 あと、int型xを10に初期化・・・。b1にtrueを代入・・・。この時点でSystem.Console.WriteLineでb1, b2を出力・・・。xが10と…

Mainメソッド

C#

C#はJavaなどと同じようにクラスで構成されている・・・。 なので、メインクラスとなるクラスのMainメソッドがエントリポイントとなる・・・。コンソールに"MainMethod"と表示するプログラムを作ってみる・・・。プロジェクトを新規作成する・・・。 ここで…