--- layout: old_post title: C# (と.NET) 勉強1 permalink: /tatsuya/show/114-c-net ---
急遽C#と.NETを勉強する必要ができて、わーー大変。
これまでJava & Rubyを使ってきたのでその違いをメモ。
<C#の特徴or良いor変な点>
・静的な型付け
・namespaceの概念
・定数は3種類
・リテラル定数
=> 32はリテラル、32は32であり99ではない(変な翻訳だ)
・シンボリック定数
=> const int FreezingPoint = 32; のように定義する
・列挙型
=> enum Hoge{ hoge1=1, hoge2=2 } のように定義、Hoge.hoge1 は1となる
・演算子
・モジュロ演算子(除算の余りを得る):1==10%3 はtrue
・インクリメント:x=1; y=++x; で。 yは1、xは2
・三項演算子:return x=="true" ? true : false xが"true"ならtrueを返す
・ステートメント:for, while, if else , switch, case基本は当然ある。
・クラスについて
・ほぼJavaと同じ
・デストラクタ(ファイナライザ)が独特?:~Hoge(){ } で定義。GCの時に呼ばれるよ。
・貴重なリソースはusingステートメント内で使用する
using(Font font = new Font("Arial",10.0f){
//処理を記述
}
//fontは解放済み
・参照渡し&値渡し:プリミティブ型(int, string, char)は値渡し、それ意外のオブジェクトは参照渡し
・プリミティブ型を参照渡ししたい場合
public void Pow( ref int x ){
x *= x;
}
int x = 5;
hoge.Pow( ref x); とrefを引数に付ける。または変数の初期化をあらかじめ行わない場合outを使う
public void Pow( out int x){
x = 999;
}
hoge.Pow( out x);
・メソッドのオーバーロード:普通に定義(引数変えて)
・プロパティ:メンバ変数をメソッドで隠蔽する
class Test
private int hoge;
public int Hoge {
get {
return this.hoge;
}
set {
this.hoge = value;
}
}
}
別のオブジェクトから test.Hoge = 99; とアクセスする。(setterとgetterみたい)、これはrubyの場合
class Test
attr_accessor :hoge
end
で test.hoge = 99 とアクセス(楽だ)
・配列:普通に宣言、普通に使用
・int[] myArray = new int[5]; myArray[1] = 99; 普通に
・int[] myArray = { 1, 2, 3, 4, 5 }; 割に普通
・myArray.Length でサイズ
・Copy, Reverse, Sort, 色々なメソッドは用意されている
・foreach :要素毎に処理を繰り返す(ruby的)
foreach( int x in myArray){
Console.WriteLine( i.ToString() );
}
・params キーワードで引数を配列として受け取る
public int Hoge( params int[] intArray){
foreach( int x in intArray){
Console.WriteLine( x.ToString() );
}
}
test.Hoge(1, 2, 3, 4, 5);
・多次元配列:int[,,] intArray = new int[2,3,4]; intArray[0,1,0]=99; のように
・ジャグ配列:ジャグ(ギザギザ)の配列、配列の配列
int[][] jaggArray = new int[3][];
jaggArray[0] = new int[5]; //1列目は5行の配列
jaggArray[1] = new int[2]; //2列目は2行
(便利なのかな〜?判りにくい気がする)
最初想像していたよりは、意外に普通だと思った。