--- layout: old_post title: C# (と.NET) 勉強1 permalink: /tatsuya/show/114-c-net ---

急遽C#と.NETを勉強する必要ができて、わーー大変。
これまでJava & Rubyを使ってきたのでその違いをメモ。

<C#の特徴or良いor変な点>
・静的な型付け
・namespaceの概念

・rubyやJavaで言うパッケージみたいな物。namespace Net{ class HTTP{ ・・・・・・ } } でNet.HTTPクラスのようになる
・namespaceの宣言を行う。System.Console.writeLine("Hello World") が using System; と宣言すれば Console.writeLine("Hello World")となる(まさにパッケージ)

・定数は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行
(便利なのかな〜?判りにくい気がする)

最初想像していたよりは、意外に普通だと思った。