C#

extern

C#

C++などで書かれた外部ライブラリ(DLL)のメソッドを呼び出す場合に、externでそのメソッドを宣言する必要がある。 DllImport属性と共に使う。extern 修飾子 - C# リファレンス | Microsoft Docs Win32 APIやDLL関数を呼び出すには?:.NET TIPS - @IT空のプ…

クラスライブラリファイルの静的リンク

C#

DLLを参照する方法以外に、クラスライブラリのファイルを静的にリンクするという方法がある。クラスライブラリの静的リンクによる参照 - c++ 使いの c# メモ静的リンクというとスタティックライブラリのことが思い浮かぶが、C#のクラスライブラリはDLL。 ラ…

DLLの参照

C#

前回はプロジェクトごと参照したので、今回はDLLだけの場合にDLLを参照する。C#でプラグインDLLを作る方法(入門編) - Qiita C# Hello DLLといってもVisualStudioでだけど。空のプロジェクト空のプロジェクトで、MainClass.csを追加MainClass.csを追加。こ…

クラスライブラリ

C#

C#でライブラリを作る場合、クラスライブラリと呼ばれていて、形式はDLLである。C#でプラグインDLLを作る方法(入門編) - Qiita C# Hello DLLクラスライブラリプロジェクトで作るのが普通だが、今回は空のプロジェクトで、空のプロジェクトプロジェクトClas…

オプション引数

C#

C#4.0でようやくオプション引数(デフォルト引数)に対応した。名前付き引数と省略可能な引数 - C# プログラミング ガイド | Microsoft Docs オプション引数・名前付き引数 - C# によるプログラミング入門 | ++C++; // 未確認飛行 CMainClass.csで、PrintVecto…

dynamic

C#

C#4.0では、dynamicを使って、動的型付け変数を宣言できる。dynamic - C# リファレンス | Microsoft Docs dynamic - C# によるプログラミング入門 | ++C++; // 未確認飛行 CまずはVisualStudioの、空のプロジェクト空のプロジェクトで、MainClass.csを追加し…

typeof

C#

typeofで指定のクラスのType型を取得できる。typeof - C# リファレンス | Microsoft Docs C#で型を判別するtypeofとis演算子 - Ararami StudioBaseClass.cs、DerivedClass1.cs、DerivedClass2.csは前回と同じで、MainClass.csは、Object.GetTypeで取得したも…

as

C#

asは安全にダウンキャストを行う。as - C# リファレンス | Microsoft Docsダウンキャスト可能な型ならキャストするが、失敗した場合はnullを返す。基底クラスBaseClass.csは、派生クラスDerivedClass1.csは、派生クラスDerivedClass2.csは、そして、MainClas…

is

C#

isは、指定のオブジェクトが指定のクラスであるかを判定する。is - C# リファレンス | Microsoft Docsそのクラスと同じというより、互換性があるかということなので、アップキャストできる基底クラスでもTrueになる。基底クラスBaseClass.csは、Outputメソッ…

sealed

C#

sealedは、継承禁止を表すキーワード。sealed 修飾子 - C# リファレンス | Microsoft Docs 継承 - C# によるプログラミング入門 | ++C++; // 未確認飛行 CClass1.csで、このようなクラスを定義し、 Class2.csで、Class1を継承、そしてsealedを付けて継承禁止…

readonly

C#

readonlyは、読み取り専用を表すキーワード。readonly キーワード - C# リファレンス | Microsoft Docs 定数 - C# によるプログラミング入門 | ++C++; // 未確認飛行 Cconstと違い、コンストラクタでは値のセットができる。空のプロジェクトで、Class1.csは…

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をつけることで、このような引数型と戻り値型のメ…