2019-01-01から1年間の記事一覧

クラスの継承②

C#

動作の書き換え オーバーライド overrideキーワードを付与することで、継承元のメソッドと同名・同シグネチャのメソッドを継承先で定義(オーバーライド)することができます。 これに伴い、継承元のメソッドは外部から使用できなくなります。 オーバーライド…

クラスの継承①

C#

概要 クラスは単一の継承元クラスを指定することができます。 それにより、継承元クラスの持つ機能・情報を共用、更には拡張することができます。 抽象的な情報を持つクラスを継承元とし、継承先でより具体的な情報を持たせるといった形で使用します。 継承…

型の変換

C#

暗黙的型変換 暗黙的型変換は明示的に型の変換を指示することなく、自動的に型変換する仕組みです。 以下条件を満たす場合に暗黙的型変換が利用できます。 情報量の少ない型から大きい型への変換 派生型から基底型への変換 インターフェース型への変換 // 1 …

C#

概要 型には値型と参照型の2種類があります。 値型 データの値そのものを保持する型を値型といいます。 構造体・列挙型が該当します。 構造体(struct) structキーワードを付与して定義されたものは構造体となり、値型として扱われます。 public struct Hoge …

例外

概要 処理中に発生した異常を例外(Exception)という形で上流の処理に通知できます。 通知された側は例外に応じて適切なハンドリングを行うことで、プログラム実行中の異常をコントロールします。 ただし、例外は重たい処理なので、要否を適切に判断する必要…

デリゲート

C#

概要 デリゲートはメソッドなどの処理自体を持つことができる型です。 デリゲート型のインスタンスに処理を登録し、そのインスタンスを経由することでどこからでも処理を呼び出すことができます。 Action・Func・EventHandlerなどのデリゲート型が用意されて…

イベント

C#

概要 任意インスタンスからのイベント発行を、他インスタンスで購読し、それをトリガーに処理を動かすことができます。 イベントの定義 eventキーワードを用いて定義します。 public event EventHandler HogeEvent; eventキーワードとともに指定する型はデリ…

Task④

C#

タスクのキャンセル タスクに渡したラムダ式内でOperationCanceledExceptionをスローすることでタスクをキャンセルできます。 キャンセルされたタスクのTask.StatusはCanceledになります。 var task = Task.Run(() => throw new OperationCanceledException(…

マルチスレッドの管理①

C#

排他制御 スレッドセーフでないオブジェクトに対して複数スレッドからアクセスした場合、競合が発生します。 例えば、コレクションへの追加中に、他スレッドからは削除が行われた場合、追加結果が期待値と異なってしまうといった状況です。 追加処理に排他制…

Task③

C#

async/await await メソッド内でTaskの実行を非同期的に待機する場合、awaitキーワードを付与します。 var task = Task.Run(() => hoge((); await task; awaitした時点で、メソッドは待機状態となり、呼び出し元に処理が戻ります。 taskが完了するとメソッド…

Thread②

C#

スレッドの基本② ThreadStatic/ThreadLocal 以下2つの方法で、アクセスするスレッド毎にフィールド/変数に異なる値を持つことができます。 staticフィールドに対してThreadStatic属性を付与する [TheadStatic] private static int hoge; ThreadLocal型のフィ…

Thread①

C#

スレッドの基本① スレッドの作成 コンストラクターにラムダ式を渡して生成します。 var thread = new Thread(() => hoge()); ラムダ式に引数を与えることもできます。 単一の引数のみ許容し、object型として扱われます。 var thread = new Thread(hoge => fu…

Task②

C#

Taskの基本② 継続タスク 子タスク Taskの基本② 継続タスク Task.ContinueWith()を使用することで、後続タスクを登録できます。 後続タスクは先行タスクを受けるAction/ラムダ式を引数にします。 先行タスクに戻り値がある場合、Resultから取得できます。 継…

Task①

C#

Taskの基本① Taskの作成/開始 Taskの待機 Taskの戻り値 Taskの基本① Taskの作成/開始 以下コードでタスクを作成/開始できます。 var task = new Task(() => hoge()); task.Start(); 以下のように①行で書くこともできます。 var task = Task.Run(() => hoge()…

並列処理について③(PLINQ)

C#

PLINQ ParallelEnumerable.AsParallel() 並列実行方法のコントロール 例外 PLINQ ParallelEnumerable.AsParallel() AsParallel()を使用することで、LINQのクエリを並列実行することができる。 ただし、必ずしも並列実行されるわけでなく、AsParallel()にてパ…

並列処理について②(Parallel.For/ForEachの管理)

C#

ParallelLoopState ParallelLoopState.Stop() ParallelLoopState.Break() ParallelLoopResult ParallelLoopState Prallel.For/ForEachにわたすAction/ラムダ式は、ParallelLoopStateを引数とするものも指定可能です。 ParallelLoopState.Stop()/Break()によ…

並列処理について①(Parallel)

並列処理のポイント Parallel Parallel.Invoke Parallel.ForEach Parallel.For 並列処理のポイント タスクは特定のプロセッサに割り当てることはできない。空いたものに自動的に割り当てられる。 開発者はどのプロセスがアクティブなのか、プロセスの実行時…

はじめに

Programming in C#の資格を取るための勉強内容を晒すブログです。 英語テキストに沿って進めていきます。 極力毎日更新できるようにがんばる。