C#

partial

C#

partialを使うことで、クラスの定義を複数の箇所に分割できる。partial 型 - C# リファレンス | Microsoft DocsWindows アプリケーションWindows アプリケーションで作成。新しい項目新しい項目として、Class1_A.csコードファイルでClass1_A.csを追加。parti…

LINQ

C#

LINQ(統合言語クエリ)は、C# 3.0の目玉機能であり、これを使うことで、条件にあったデータの絞り込みなどが行える。LINQ (統合言語クエリ) | Microsoft DocsBody.csに、名前と年齢と体重を持つクラスを定義しておく。MainClass.csで、BodyのListを作って、そ…

匿名型

C#

匿名型は、名前のない一時的な型で、読み取り専用の値をプロパティとして設定できる。匿名型 - C# プログラミング ガイド | Microsoft Docsprofという匿名型のオブジェクトを作っておいて、メンバを出力。 prof.Name = Taro prof.Age = 20 prof.Address = To…

ラムダ式

C#

C#でもラムダ式を使える。デリゲートの派生した形の匿名関数がさらに派生した形になっている。ラムダ式 - C# プログラミング ガイド | Microsoft Docs前半はファイルチェックのラムダ式、後半は平方を求めるラムダ式。 test.txt is Exists. Check OK. sd(5) …

拡張メソッド

C#

拡張メソッドを使うと、新規に派生クラスを定義したり、元のクラスを変更せずに、新しいメソッドを追加できる。拡張メソッド - C# プログラミング ガイド | Microsoft DocsAdd、Subというスタティッククラスを定義しておいて、public staticなメソッドを用意…

var

C#

C# 3.0から、varキーワードを使うことで、暗黙的な型のローカル変数を定義できるようになった。 いわゆる型推論である。var - C# リファレンス | Microsoft DocsMainClass.csで、整数変数や文字列。配列やコレクション。foreachの中の一時変数としても使える…

yield

C#

前回、IEnumeratorを継承したオブジェクトを作ってGetEnumeratorで返すことで、foreachによるアクセスを可能にした。 しかし、いちいちオブジェクトを作るのも大変・・・。GetEnumerator内で、要素ごとにyield returnすれば、その要素を持つ仮想のコレクショ…

構造体

C#

C#では、クラスは参照型、構造体は値型という大きな違いがある・・・。TestClass.csを、 // 名前空間の登録 using System; // 共通データ型と基本クラス(System名前空間) // 文字列を持つクラス class TestClass // TestClassクラスの定義 { // メンバフィー…

新しいデリゲート

C#

C# 2.0から、新しいデリゲートの書き方が可能になり、メソッド名をそのまま左辺に持ってくることが可能になった・・・。 <デリゲート型名> <デリゲートオブジェクト> = <呼び出すメソッド名>; これまで、 // 名前空間の登録 using System; // 共通データ型と…

匿名メソッド

C#

これまで、デリゲートオブジェクトにメソッドを格納する形で、さまざまな場所でそのメソッドを呼ぶことができた・・・。 しかし、メソッド自体は、デリゲートの条件に合う引数型と戻り値型で名前の付いたメソッドをきちんと定義しないといけなかった・・・。…

EndInvoke

C#

EndInvokeでは、非同期処理メソッドの戻り値を受け取ることができるし、参照渡しで受け取ることもできる・・・。今回は、2つの値の足し算を非同期処理でさせて、結果を取得する・・・。今回のAsyncronousFuncDelegateは、引数にint型のa, bとint型の参照渡し…

BeginInvoke

C#

ThreadやThreadPoolを使わなくても、デリゲートで非同期処理が実行できる・・・。 (実際には内部でThreadPoolを使っているのだが・・・。)Calling Synchronous Methods Asynchronouslydelegate型を定義すると、C#コンパイラが自動でBeginInvoke、EndInvokeな…

ジェネリクス

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]…