C#

... 続きを読む

~プログラミングを勉強してみませんか?~

TechAcademy [テックアカデミー] 無料の体験講座が用意されているので、気軽に体験できます。

※私(サイト主)も無料体験講座を実際に受けてみました(→感想)

基本クラスと派生クラスのメンバで同じ名前を使用したい場合(C#)

newキーワード 基本クラスのメンバと派生クラスのメンバで同じ名前を使用することは可能です。 ※メンバとは、フィールド、プロパティ、メソッドなど、クラスの構成要素を意味します。 基本クラスのメンバと同じ名前を使用したい場合、派生クラスのメンバに対してnewキーワードを付けます。 派生クラスのメンバにnewキーワードを付けることで、外部からアクセスがあった場合に派生クラスのメンバが採用されるようになります。 このように、基本クラスのメンバを派生クラスによって隠すことを「名前の隠蔽」と呼びます。 ※「名前の隠蔽」のために使用するnewキーワードは、クラスをインスタンス化する際に使用するnew演算子とは別物です。 ※実は、newキーワードを付けなくても、警告は出ますがエラーにはなりません。そのため... 続きを読む

継承とは?基本クラスと派生クラスの関係について(C#)

継承(Inheritance)とは 継承とは、あるクラスの機能を引き継いだ新しいクラスを作成することです。 継承の基となるクラスを「基本クラス」(Base Class)または「スーパークラス」(Superclass)を呼ばれます。 基本クラスの機能を受け継いだ新たなクラスを「派生クラス」(Derived Class)または「サブクラス」(Subclass)と呼びます。 C#では、派生クラスを作る際に、1つの基本クラスから継承できません。このように1つのクラスからしか継承できないことを「単一継承」と呼びます。 逆に、C++では、複数の基本クラスを継承することができます。このことを「多重継承」と呼びます。C#では、C++で可能な「多重継承」は許されていません。 継承するには、派生クラスを宣言する... 続きを読む

匿名メソッドと比較した時のラムダ式のメリット(C#)

ラムダ式 メソッドは必要だが、他のクラスからアクセスされることはないという時にラムダ式は役に立ちます。 匿名メソッドと同様に、デリゲートを介してのみでしかメソッドを使わない場合に使用されます。 ラムダ式を使用すれば、メソッドを定義して実行することに相当する操作を、メソッド内に埋め込むことができます。 ラムダ式は以下のように記述します。 (引数) =>式; イカに似ている「=>」はラムダ演算子です。 式が複数行になる場合は以下のように中カッコ{}とカンマ;が必要です。 (引数) => {   式;   式; }; ラムダ式はよく匿名メソッドと比較されます。 ラムダ式はC#3.0の機能で、匿名メソッドはC#2.0の機能です。 ラムダ式は匿名メソッドと比較して、少ないコード量で同... 続きを読む

匿名メソッドと通常のメソッドとの違いについて(C#)

匿名メソッドとは あるメソッドがデリゲートを介してしか呼び出されない場合、匿名メソッドを使用すると記述が簡素になります。 逆に言えば、あるメソッドが他のクラスからアクセスされる可能性がある場合は、匿名メソッドを使用しない方がいいです。 匿名メソッドはC#2.0から使える機能です。この匿名メソッドという機能は、C#3.0で追加されたラムダ式の下位互換と言っても過言ではありません。 そのため、匿名メソッドを必ず理解する必要のある機能かと言われるとかなり微妙です。 匿名メソッドは、ラムダ式の良さを理解するための当て馬的な扱いをされることが多いです。 匿名メソッドを使わない場合との比較 ソースコード(匿名メソッドを使わない場合) 実行結果 こんにちは ソースコード(匿名メソッドを使った場合) 実... 続きを読む

デリゲートとは?デリゲートの書き方について(C#)

デリゲートとは? デリゲートを使うことで、メソッドの参照情報を格納するための型を作成することができます。 デリゲートを宣言する際には、メソッドと同様に、戻り値と引数を指定する必要があります。 デリゲートは以下のように宣言します。 アクセス修飾子delegate 戻り値の型 デリゲート名(引数); 戻り値と引数の組み合わせが異なるメソッドに対して、同じデリゲート型で扱うことはできません。 ※デリゲートは異なる引数の組み合わせに対して同じ名称を割り振ることができません。メソッドでできたオーバーロードみたいなことはできません。 ソースコード 実行結果 こんにちは おはようございます   delegate void Del(); という部分で、戻り値がない(void)で、引数もないDe... 続きを読む

列挙型の使い方とマジックナンバーの防ぎ方(C#)

列挙型とは 列挙型を使えば、数字に対して、名前を割り振ることができます。 イメージとしては、ある数字が何を意味しているかわかるように、ラベルを貼り付けているようなものです。 ※列挙型は、「列挙体」と呼ばれることがあります。 列挙型は以下のように定義されます。 アクセス修飾子 enum:データ型{ 列挙子名=値, … } enumは、「イーナム」と読まれることが多いようです。(人によって結構読み方がバラバラだったりします) ※enumの読み方(参考):http://yomikata.org/word/enum 列挙子名に割り振られる整数の型は指定しなければ、int型が採用されます。(int型以外にもbyte,sbyte,short,ushort,uint,long,ulongといった他の... 続きを読む

コンストラクターとは?使用例を交えて説明(C#)

コンストラクターとは コンストラクターとは、クラスからインスタンスが生成された時に、最初に一度だけ呼び出されるメソッドのようなものです。 ただし、メソッドと違って、戻り値を指定する必要はありません(戻り値がないからといって、voidと書く必要もありません) コンストラクターは以下のような形で書きます。 アクセス修飾子 名前 (引数) { 処理文; } コンストラクターは必ず、クラスと同一の名称を指定する必要があります。 クラスが呼び出された時に、コンストラクターに書かれて処理が最初に行われるという性質上、フィールドの値の初期化に使われることが多いです。 ソースコード 実行結果 コンストラクターが呼び出されました 20 アクセス修飾子は基本的にpublicを指定してください(publi... 続きを読む

自動実装プロパティとは?初期値の設定も含め解説(C#)

自動実装プロパティとは 自動実装プロパティは、以下のような形で記述されます。 データ型 プロパティ名 {get; set;}   以下のようにフィールドとプロパティが記述されたコードがあった場合を考えます。 private int _num; public int Num {   get { return _num; }   set { _num = value; } } 自動実装プロパティがあった場合、以下のように簡潔に書くことができます。 public int Num { get; set; } 自動実装プロパティを使えば、値を格納するためのフィールドを明示的に用意する必要がなくなります。(この場合、_numに相当するフィールドを明示的に宣言する必要がありません) こ... 続きを読む

アクセサーの制御(C#)

アクセサーの省略 プロパティは、getアクセサーとsetアクセサーの2つのアクセサーから通常は構成されます。 しかし、getアクセサーとsetアクセサーの両方を必ず用意しないというわけではありません。片方だけでも問題ありません。 getアクセサーのみであれば、読み取り専用プロパティとして振舞います。 setアクセサーのみであれば、書き込み専用プロパティとして振舞います。 ソースコード 実行結果 10 40 mc.Resultに対して、mc.Numのように値を代入しようとするとエラーになります。 逆に、mc.Numに対して、mc.Resultのように値を読み出そうとするとエラーになります。 アクセシビリティの設定 getアクセサーとsetアクセサーに対して、それぞれ異なるアクセシビリティを... 続きを読む

プロパティとは?プロパティの使用例(C#)

プロパティとは プロパティは、クラスの外部からフィールドにアクセスするときの窓口になります。 そのため、プロパティとフィールドはセットで使われることが多いです。 プロパティの基本形 プロパティの最も基本的な書き方は以下のようになります。 アクセス修飾子 データ型 プロパティ名 {   get { returnフィールド; }   set { フィールド= value; } } プロパティは、getアクセサーとsetアクセサーという2つのサクセサーから構成されています。 プロパティの値を知りたいときに、getアクセサーが呼び出されます。 逆に、プロパティに値を設定するときに、setアクセサーが呼び出されます。 ※プロパティを使用する側から見ると、あたかも、プロパティに値が代入されて... 続きを読む

~プログラミングを勉強してみませんか?~

TechAcademy [テックアカデミー] 無料の体験講座が用意されているので、気軽に体験できます。

※私(サイト主)も無料体験講座を実際に受けてみました(→感想)