勉強備忘録:ドットインストールC#入門

1.変数/定数宣言

1-1.宣言方法

・変数宣言:型 変数名
・定数宣言:const 型 変数名 =値;※値がないと宣言できない。
・var 変数名=値:型推論で型を自動で設定。
・型変換キャスト(変換後のデータ型)

1-2.型の種類

・文字列 string 
 文字列オブジェクトがメモリ領域上に確保され、
 変数varには、その参照が格納される。
・文字 char
 変数varがメモリ領域上に確保され、文字「a」のUnicodeが
 変数varに直接格納される。
・整数
 byte 範囲は0~255で、符号なしビット整数
 short 範囲は-32768~32767で、符号付き16ビット整数
 int 範囲は-2147483648~2147483647で、符号付き32ビット整数
 long 範囲は-9223372036854770000~9223372036854775807で、 
 符号付き64ビット整数
・浮動小数
 double 範囲は±5.0e-324~±1.7e308で、有効桁数15~16桁
 float 範囲は±1.5e-45~±3.4e38で、有効桁数7桁
・論理値 bool(true or false)

2.文字列

・\n→改行、\t→改行
・string.Format
 例:string.Format("こんにちは、{0}さん。今は{1}時です。", name, hour);
 文字列補完式で書く。
 $"こんにちは、{name}さん。 今は{hour}時です。"
・文字列を数値に変換する。
 int.Parse(文字列)

3.配列

・宣言方法
 int[] scores = new int[3]{10,20,30}
 型推論も可。
・foreachで値を取得するときは、変数の型宣言を忘れない。
 foreach(int score in scores){}

4.メソッド、引数

・static 戻り値の型 関数名(){}
・void 戻り値なし
・ラムダ式、戻り値のみの記載の省略あり。
 static string greeting ()=> "Hi";
・引数も変数の型宣言忘れない。
 static void SayHi(String name){}
 デフォルト値の設定
 static void SayHi(String name = "Taro"){}
 呼び出すとき引数を指定することも可能。
 SayHi(name:"Taro")

5.クラス

5-1.概要

・変数(フィールド)とメソッドを持つ。
 User user = new User(あればコンストラクタに渡す引数);

5-2.オーバーロード

・引数が違う同名の関数やコンストラクタ。
 元のコンストラクタ
 public User(引数){}
 オーバーロードしたコンストラクタ
 public User():this("nobody")→元のコンストラクタを呼び出している。

5-3.サブクラス

・親クラスのコンストラクタを呼び出す。
 public AdminiUser(string name): base(name){}
 親クラスのメソッドを上書きする場合、
 親クラスには、virtual 子クラスには、overrideをつける。

5-4.アクセス修飾子

・public→どこかれでも、protection→サブクラスから
 private→自分のクラス内のみ

5-5.プロパティ

 クラスフィールドは、privateにして、必要なときに取得する。
 メソッドを書かず、プロパティでも定義できる。
 public string Name{
  get{return this.name;}
  set{this.name = value;}
 }
 user.Nameなどで操作可能になる。以下のように省略も可能。
 public string Name{get; set;} = "ME!"

5-6.インデクサ

・作ったインスタンスを配列として扱う。
 クラス内で配列を宣言して、宣言した配列を操作。
 private string[]members = new string[3];
 public string this[int i]{
  get{return this.members[i];}
  set{this.member[i] = value}
 }

5-7.staticフィールド

・インスタンスではなく、クラスで保持する。
クラス名.フィールド名と書く。

5-8.抽象クラスと具象クラス

・抽象クラスは、ほかのクラスに継承してもうらうことを前提にするクラス
 で、それ自体をインスタンス化することはできない。abstractをつける。
 継承する側のクラスは、具象クラス。メソッドにもabstractをつける。
 継承する側で、メソッドを定義するときは、overrideをつける。

6.インターフェース

・特定の機能を実装するよう約束させるための仕組み。
 interfase IShareable{
  void share();
 }
 ※関数は、自動的にpublicになる。
 class User:IShareable{
   public void share(){
   }
 }
 ※share関数がないとエラーが出る。

7.ジェネリック型

・汎用化されたデータ型でクラスをつくることができる。
 class MyData<T>{
  public void GetThree<T x>{  
  }
 }
 <T>で書くと、型は生成時に定義することを宣言。
 呼び出すとき
 MyData<string> mydata = new MyData<string>

8.名前空間

・整理するため、名前の衝突を避けるために使う。
 namespace DotinstallNamespace{
  クラスを定義
 }
 使用する際は、名前空間.クラス名とすればよいが、
 一般的には、Using.名前空間と冒頭に記載する。

9.構造体

・クラスと似ているが、単純で小さな値を保持するのに適している。
 値型は、構造体、列挙体で、
 参照型は、クラス、配列、インターフェイス、デリゲート。
 struct 名前{}で宣言。プロパティ、変数、メソッドは使えるが、
 継承などはできない。

10.列挙型

・いくつかの定数をまとめて、一つの変数で扱いたい場合に使う。
 switch-case文のcaseの値に使用されることが多くある。
 enum Direction{ stay = 0, Right = 1, Left = -1}
 値を使用しない場合は、0から、順番に整数が割り当てられる。
 Direction.stayだと、stayが取得され、(int)で整数変換すると、
 割り当てられた整数値が取得できる。

11.例外

・try{}catch(例外クラス 変数){}
・独自の例外を使用する場合は、Exceptionクラスを継承した独自の
 例外クラスを定義する。
 例外を発生させるタイミングで、"throw new 独自の例外クラス"
 とし、catchする。
・finallyを定義すると、例外発生有無に関わらず実行する処理を
 定義できる。

12.デリゲート

・メソッドを割り当てられる変数。メソッドを変数として扱える。
 delegate void MyDelegate();
 戻り値と引数なしの関数を宣言。
 +=で追加、-=で削除。複数の関数が割り当てられているとき、
 マルチキャストデリゲートという。

13.イベント

・イベントが起きた時の処理を登録するdelegateをEventHandlerと呼ぶ。
 イベントハンドラーを定義する際に、eventとつけると、そのクラスから
 のみ実行可能という制限を付けられる。
 eventをつけると、+=で追加、-=で削除しかできない。

14.コレクションクラス

・Collectionクラスを使うには、名前空間にCollection.Genericを読み込む。

14-1.List

 List<int> scores = new List<int>(){30,80.60}
 add・count・foreachなど、メソッドやプロパティが使える。
 配列は、要素の数があらかじめ決まっていて、Listは決まっていない。
 配列は静的メモリ確保、Listは動的メモリ確保。

14-2.HashSet

・順番を持たない、かつ重複を許さないデータの集合。
 含まれているものを調べるとき、Contains。

14-3.Dictionary

・キーと値でデータを管理する集合。
 Dictionary<キーの型,値の型>
 Dictionary<string,int> users = new Dictionary<string,int>(){{"taguchi",50},…}
・Keyでキーの値、Valueで値を取得できる。
・foreachを使うときの変数は、KeyValuePair型で扱う。

15.LINQ

・データの集合から取得したい情報を引っ張ってくるための仕組み。
・SQLのように書く方法とメソッドのように書く方法がある。
・名前空間System.linqを読み込む。

16.その他

・C#にも条件式あり。(条件式)? 新の場合:偽の場合
・匿名メソッド delegate{処理}で、書くこともできる。
・VSショートカット
 コード整形:Ctr+K,Ctr+D
 コメントアウト:Ctr+K,Ctr+C

17.感想

・C#でアロー関数的なものが出てきてびっくり!javascriptの勉強も
 役立ったのでよかった。
・静的型付け言語のため、基本的に変数の型宣言を忘れないこと!

この記事が参加している募集

この記事が気に入ったらサポートをしてみませんか?