やす流 Top


C#言語


このC#は、C++にさらに++が追加され、4つの+を組合すことで、#となり、 進化していることをうまい表現で、ネーミングされている。 基本的にポインタが使えない、メモリの管理をフレームワークが行なうことで、 厄介だったメモリリークと無縁となる。 だが、C言語に慣れ親しんだプログラマには、ポインタを使ったいろいろな工夫が使えないとなると、 面白みにかけるのではと思ってしまうのは、僕だけではあるまい。 でも、非常に合理的なのだ。潔くポインタを切り捨てることにより、生産性をあげる。 プロとして仕事をするならば、C#は、よい選択ではないかと最近、そう思うようになってきた。 ただ、実行ファイルをクリックしてから、起動するまでのネイティブコード作成までの時間が、 やたら長く感じる。。。

.NETフレームワークは、.NETプラットフォームで動作するプログラムの 開発と実行できる環境を提供する。 .NETフレームワークは、色々な言語で開発できるが、型が共通型システム(CTS)で統一されている。

No.  項目 内容 備考
下記の2つの種類がある。
①値型(System.ValueTypeより派生)・・・構造体、数値、enum、bool。
※参照型より参照速度が速い。
②参照型(System.Objectから派生)・・・クラス。実体への位置を示すポインタ。
※オブジェクト参照する変数の代入は当然、参照位置だけが変更されるため、高速である。
型の種類
C#の型 CTSの型 説明
bool System.Boolean ブール型。True/False
byte System.Byte 符号なし、8ビット
sbyte System.SByte 符号あり、8ビット
short System.Int16 符号あり、16ビット
ushort System.UInt16 符号なし、16ビット
int System.Int32 符号あり、32ビット
uint System.UInt32 符号なし、32ビット
long System.Int64 符号あり、64ビット
ulong System.UInt64 符号なし、64ビット
char System.Char ユニコード(2バイト文字)
decimal System.Decimal 96ビットの10進数。丸めなどが考慮されている。有効桁数28。
float System.Single 単精度浮動小数点(32ビット)。有効桁数7
double System.Double 倍精度浮動小数点(64ビット)。有効桁数15
  System.IntPtr 符号あり可変サイズの整数型(CPUのレジスタ幅の違いを利用したい場合)
  System.UIntPtr 符号なし可変サイズの整数型(ポインタ操作時にマシンの違いを吸収する)
enum 列挙型 定数を扱う特別の型
string System.String 参照 ユニコード文字列
 
クラスや構造体のメンバ (1)メソッド
メソッドの種類 説明
メソッド インスタンスに対する操作を表す処理コード。
静的メソッド 型に対するメソッド。
タイプイニシャライズ 静的コンストラクタ。静的フィールドの初期化などに利用。
※必要となる前に1度だけ、実行される。
コンストラクタ インスタンス生成時に実行される。
構造体の場合、デフォルトコンストラクタは書くことができない。
→自動的にコンパイラが作るから。クラスの場合、なければ、自動的に作られる。
プロパティ(アクセッサ) 呼び出し側からは、フィールドに見える特殊なメソッド。
get/setにより、メンバ変数の操作に関する関数作成の手間を省ける。
インデクサ オブジェクトの配列扱いできる特殊なメソッド。
get/setを使う。
イベントアクセッサ イベントを追加/削除できるメソッド。
オペレータ 演算子メソッド
 
(2)フィールド
フィールドの種類 説明
インスタンスフィールド インスタンス毎に作られる型のデータ。
静的フィールド 型に対するフィールド。必要になると生成され、プログラム終了まで残っている。
定数 値に名前を付ける。
イベント イベントを登録できる領域。

 
定数 ・public const int iNum=99;
・「0.5d」→double型となる。サフィックスについては、C言語と同じ。
 
配列 ・配列 int[] yas;  yas = new int[5]; yas[4]=10;  → int[] yas = new {0,1,2,3,4};//初期化も同時にできる。 ・多次元配列
 int[,,] yas; yas = new int[1,2,3]; →int[,,] yas = new int[]{{{0,0,0},{1,2,3}}};//初期化も同時にできる。 ・ジャグ配列(配列の配列→ポインタのポインタ)
 int[][] yas; yas = new int[3][]; yas[0] = new int[3]; yas[0][2]=99;   int[][] yas = new int[][]{new int[]{10,20},new int[]{30,40}}; //初期化も同時にできる。
 
型変換キャスト ()の内部で指定したデータ型に型変換を行なう。  
初期化 ・値型の変数は、すべて0。
・参照型の変数は、nullとなる。
 
演算子 C言語と同じか?  
制御文 ・if
・while
・for
・do-while
・switch
・break
・continue
・goto
・return
・foreach ← 配列やコレクションの要素数だけ繰り返すことが可能となる。C#で追加されたもの。
 
10 関数 ・パラメータ yas(int yas1,ref int yas2,out int yas3){};
1つ目のパラメータ:値渡し
2つ目のパラメータ:参照渡し(そのパラメータが初期化されていないとエラーとなる。)
3つ目のパラメータ:出力(出力用のパラメータ)
 
11 ポインタ あるキーワードを使うことで、ポインタが使うことができる。  
12 構造体 ・構造体同士のコピー 同じ構造体を丸ごとコピーできる。
aaa = bbb;
 
13 ビットフィールド FlagsAttribute クラスを使う。   
14 共用体 残念ながら、なし。  
15 その他