program study story

プログラムの勉強 アウトプット

共通クラス作成 <他の名前空間にあるクラスメソッドを参照したいなら、usingディレクティブを使う>

共通クラス作成にあたっての段取りを記入。

共通クラスは1つ1つのクラスの機能を一つにしたもの。

・どのような共通クラスを作るか、考える

・考えた各クラスの作成

・各クラスを一つにする

このような流れの中で、私自身、今回各クラスを一つにする工程を担当。

その中で、覚えたことを書き覚えする。

名前空間

プログラムは名前空間を使ってクラスの分類・階層を整理している。

名前空間を利用してクラスを整理することができる。

宣言方法

name spaceキーワードを使う

階層的に宣言する書き方

:記述方法 その1  

namespace N1

{

  class A {  }

  namespace N2

  {

    classC{  }

  }

}

:記述方法 その2 

namespace N1.N2

{

  calssB{  }

}

※別の名前空間内で定義されたクラスを参照する場合

名前空間とクラス名を.でつなげた完全修飾子名で指定する

・usingディレクティブを利用する

 

完全修飾子

修飾子とは

型および型メンバーの宣言を修飾するために使用。

修飾子の種類

public,private,internal,protectedなど様々。型およびメンバーで宣言されたアクセシビリティを指定します。

アクセシビリティとは

近づきやすさやアクセスのしやすさのこと

各修飾子の意味

abstract

クラスが、他のクラスの基本クラスになるためだけのものであること

async

修飾されたメソッド、ラムダ式、または匿名メソッドが非同期であることを示します。

const

フィールドまたはローカル変数の値が変更されないことを指定します。

event

イベントを宣言します

extern

メソッドが外部で実装されることを示します

new

基底クラスから継承されたメンバーを明示的に隠ぺいします。

override

基本クラスから継承された仮想メンバーの新しい実装を提供します

partial

同一アセンブリに部分クラス、部分構造体、または部分メソッドを定義します

readonly

フィールドを宣言します。このフィールドは、宣言の一部として、またはおなじクラスのコンストラクター内でだけ、値の代入ができます。

sealed

クラスの継承ができないことを指定します

static

特定のオブジェクトではなく、型自体に所属するメンバーを宣言します。

unsafe

安全ではないコンテキストを宣言します。

virtual

メソッドまたはアクセサーを宣言します。これらの実装は、派生クラスでオーバーライドするメンバーによって変更できます。

volatile

オペレーティングシステム、ハードウェア、現在実行中のスレッドなどによって、フィールドがプログラム中で変更される場合があることを示します。

 

●usingディレクティブ

usingディレクティブを使用すると、完全修飾子を使わずにクラス名のみで別々の名前空間に属するクラスを参照できるようになる。

例)

using System;

using  System.Windows.Forms;

using ・・・など

●using aliasディレクティブを使うと、

名前空間またはクラス名のエイリアス(別名)を定義できる。

例) 

同じ名前のクラスが定義されている別のライブラリを利用する場合、通常であれば、

参照が出現する箇所すべてに完全修飾子を使って、どちらのなのかを明確に記述する必要がある。

エイリアスを使えば、その別名を使って明確に参照できるので、完全修飾子にする必要はなくなる。複数のクラスライブラリを使うと、偶然、名前が同じクラスが定義されている場合もある。そんなときに便利。

例)

namespace N1

{

 using  DateTime =N2.DateTime;

 class Program

 {

  static void Main(string [ ] args)

  {

   //usingによりSystem.Text.StringBuilderを参照

   var sb = new StringBulder();

   //System.DateTimeを参照

   var now =dateTime.Now;

   //namespace aliasによりN1.N2.MyDateTimeを参照

      var dateTime= new MyDateTime();

   //namespace aliasがない場合はこのような全ての参照箇所で完全修飾子が必要になる

   var dateTime2= new N2.DateTime();

  }

 }

}

namespace N2

{

 public class DateTime{  }

}

 

共通クラス作成に辺り、ディレクディブを活用し、他の名前空間からプロパティを

取得したり、メソッド、クラスを取得することによって、オブジェクト指向型のものを作り出すことができる。

他の名前空間にあるクラスメソッドを参照したいなら、usingディレクティブを使う!