2018-04-01から1ヶ月間の記事一覧

型の比較

ある変数の型を比較する場合、Is演算子やGetTypeとtypeofを用いた方法がある。 ただし、Is演算子は変数に格納されたオブジェクトの型が指定の型に変換可能な 場合(継承関係)にTrueを返す為、継承関係にあるクラス同士で厳密なチェックを行いたい場合は、Ge…

継承時のコンストラクタ②

■引数のあるコンストラクタの場合 引数のあるコンストラクタの場合、スーパークラスのコンストラクタは 暗黙的には引き継がれません。その為、サブクラスのインスタンス化時、 スーパークラスのコンストラクタが実行できず、エラーとなります。 引数ありのス…

継承時のコンストラクタ①

継承した場合、コンストラクタは以下の挙動を示す。 ■デフォルトコンストラクタの場合 デフォルトコンストラクタ(引数なしのコンストラクタは、サブクラスの初期化時 ①スーパークラスのコンストラクタ ②サブクラスのコンストラクタ の順で実行される。 class…

オーバーライド

継承時、サブクラスではスーパークラスの以下のメンバを同名で再定義できる。 ・メソッド ・プロパティ ・インデクサ ・イベント スーパークラスではサブクラスでオーバーライドするメンバにvirtualを付けて定義。 サブクラスでは、オーバーライドするメンバ…

サブクラスからスーパークラスのメソッドを呼ぶ

サブクラスにてスーパークラスのメソッドを隠蔽している場合も、 base.メソッド名() とすることで、スーパークラスの隠蔽されたメソッドを呼ぶことができる。

フィールド・メソッドの隠蔽

■フィールド、メソッドの隠蔽 継承時、サブクラスでスーパークラスに定義されているフィールド、メソッドと同じ 名前のフィールド、メソッドを定義することを、隠蔽と言う。 (*)隠蔽時、newはつけなくてもいいがつけるのが規則。 ただし、隠蔽はポリモーフィ…

プロパティ

■C#でのプロパティ記法 set時、値は自動で定義されるvalueに格納される。 public int Age{ set{ this._age = value; } get{ return this._age; } } ■自動プロパティ 上記のように単純にセット、ゲットするだけの場合は、自動プロパティ という記法が可能。 …

イテレータ

■イテレータ イテレータは戻り値を返してもメソッドから抜けないメソッドのこと。 yield returnという特殊なreturn命令を使うことで、値を戻した後も メソッドから抜けることなく処理を続ける。 イテレータの呼び出し側ではforeachループで使用することで イ…

タプル型(C#7~)

タプル型とは、複数の変数を一つの変数にまとめたもの。 ・(型1 メンバ名1,型2 メンバ名2,....) これは、変数の型定義やメソッドの戻り値の型定義等に使用できる。 ■変数に使用 (int age,string name) a; a.age=35; a.name="武田"; ■メソッドに使用 private …

引数の記法

■引数の規定値 メソッド定義時に、引数に"=値"とすることで規定値をセットできる。 ex) public string GetName(string name ="山田"){} ■名前付き引数 メソッド呼び出し時、引数名:値とすることで、引数の順番を変更したり 省略したり、またどの引数に値を…

静的クラス

■静的クラス クラスメンバしかもたないクラスはインスタンスが不要。 よって、クラス定義時にstatic修飾子をつけることで、インスタンス作成 を禁止した静的クラスとすることができる。

クラスメンバ

■クラスメンバ インスタンスを生成しなくても呼び出せるフィールド、メソッドの事。 静的メンバ、staticメンバとも言う。 クラスメンバの値は、全てのインスタンスで共有される。 ■クラスメソッド クラスメソッドは、通常のメソッド定義にstatic修飾子をつけ…

Class(コンストラクタ)

クラス名と同名のメソッドをコンストラクタという。 コンストラクタは、インスタンス作成時に最初に実行される。 ・オーバーライド可能 ・引数を指定可能 ■コンストラクタの引数に規定値 以下のように引数に=値とすることで規定値を与えられる。 これは通常…

Class(メソッド)

■命名規則 (1)Pascal記法(すべての単語を大文字)で統一 ex) SringBuilder (2)動詞+名詞 ex) addElements ■引数 (1)引数は65536個まで宣言できるが、5~7個以上になる場合は 関連する引数をclassに纏める等すべき。 ■修飾子 ・public,Protected internal,prot…

Class(メンバ変数)

■メンバ変数 (1)概要 ・クラスの直下に宣言された変数のこと。フィールド。 クラス内のメソッドの中で定義された変数はメンバ変数ではない。 ・メンバ変数はvarを使用できない。 (2)命名記法 命名記法はcamelCaseで統一する。 ex) firstName また、メンバ変…

Class(命名、修飾子)

■命名について (1)Pascal記法(すべての単語を大文字)で統一 ex) SringBuilder (2)目的に応じたサフィックスをつける ex) ~Exception [例外クラス] ~Attribute [属性クラス] ~Test [テストクラス] ~EventArgs [イベント引数] ■修飾子 ・public:どこからで…

Dictionary、SortedDictionary、SortedLis

Dictionaryはソート順をもたない。 SortedDictionaryはソート順を持つ。 SortedListは同様にソート順を持つDictionaryだが 検索等においてより高速なアルゴリズムを持つ。 ただし、要素の追加、削除については低速。

HashSet、SortedSet

Setは、複数のSet間で包括的な処理(セット1に含まれる要素が Set2に含まれるか等)が必要な場面で使用します。 また、検索や追加、削除もLinkedListより高速に行えます。 順番を気にしないデータ処理であれば、ListよりHashSetを使いましょう。 ただし、Setは…

LinkedList

LinkedListは要素の削除や追加が高速で行えるため、頻繁に要素の 追加や削除が見込まれる場合に使用します。 ///コレクション初期化子は不可 var linkedlist = new LinkedList<string>(); ///先頭に追加 linkedlist.AddFirst(abc");///末尾に追加 linkedlist.AddLast</string>…

List

Listは要素の参照や既存要素の更新に便利なメソッドも多いため 既存要素に対する処理(新規追加や削除を行わない)がメインの場面で 使用します。 /// 宣言と初期化 List<string> list1= new List<string>(){ "a","b","c","d","e"}; /// 宣言と初期化は別々に行うことも可能 va</string></string>…

nameof演算子(変数名をリテラルで取得する)

変数、クラスやそのメンバーの識別子を取得したい場合 nameof演算子を使用します。 ex) StringBuilder sb = new StringBuilder(); Console.WriteLine(nameof(sb)); Console.WriteLine(nameof(sb.ToString)) これを実行した場合、"sb"及び"ToString"と表示さ…

null合体演算子

■null合体演算子 式1がnullでなければ式1、nullであれば式2を返すという処理を、以下のように 記述することができます。 ・式1 ?? 式2 ある変数が空の場合に代わりのデフォルト値を返したいといった場合に便利です。

三項演算子

■三項演算子 指定された条件式の真偽に応じて対応する値を返す演算子です。 以下の通り記載します。 ・条件式 ? 式1 : 式2 条件式1を満たした場合式1、満たさない場合、式2が実行されます。 ex) score >= 70 ? "OK!” : "NG" ifよりもシンプルに記述できます…

配列の比較

配列の比較には、『SequenceEqual』メソッドを使用します。 ex) var data1 = new[1,2,3]; var data2 = new[1,2,3]; data1.SequenceEqual(data2)

オブジェクトの比較

オブジェクト(参照型)の比較には、"=="ではなく、『Equals』メソッドを使用します。 ex) date1.Equals(date2)

数値リテラルと接尾辞

数値リテラル(1や10といった数値そのもの)について、整数、実数それぞれ 以下の通り自動で型が判定されます。 ⁻整数:大きさに応じて適切な型に変換 ⁻実数:常にDouble型 リテラルの後ろに型に応じたアルファベットを付与することで リテラルの型を指定する…

StringBuilder

■StringBuilder C#では+演算子にて文字列の連結が可能ですが、パフォーマンスが 悪いため、基本的にStringBuilderを使用します。 StringBuilder sb = new StringBuilder(); string result as string; sb.Append("あいう"); sb.Append("えお"); result = sb.T…

null許容型

nullは本来参照型変数だけに設定可能な値ですが、null許容型の値型変数 にも設定することが可能です。 null許容型変数は、変数宣言時に型の最後に『?』を付与することで宣言されます。 int? num1 = null List<string> arr = null; int? len = arr?.Count; arrがNull</string>…

Null条件演算子

Null状態のオブジェクト(初期化が行われていないオブジェクト)のフィールドや メソッドにアクセスするとNullReferenceExceptionが発生します。 これを回避するためには、オブジェクトがNullか判定してからアクセスする 必要があります。 string str = null; …

型変換

■数値型同士 数値型同士の型変換は、暗黙的型変換が可能。 ただし、広い型から狭い型への変換は明示が必要。 ex) int i =13; byte b = (byte)i; ■文字列から数値 文字列を数値にする場合、対応する数値型のParseメソッドを使用。 ex) Int32.Parse("120"); た…