C#簡易入門7

学習数が4割を超えました。もう少しです。
細かい疑問点で進めなかったので補足します。グレーの囲ったスクリプト部分は明瞭な説明を中心にしている為実際に入力することはできません。
青いスクリプトは入力可能です。

C#簡易入門7

プラグイン オリジナル タグをつくろう 公式 http://jokerscript.jp/adv/next/plugin
<<C#簡易入門6に戻る
  1. クラス
  2. ローカル変数とフィールドの違いとスコープ
  3. クラスの公開範囲
  4. 継承
  5. メンバー変数


メニューに戻る

おさらい クラス class

継承を習う前にクラスについて明確に理解する必要がある。thisについて覚えておく

クラスの書き方
class クラス名{
ここに処理が記述される
処理は関数と変数からなり、それぞれ関数はメソッド、変数はフィールドと呼ばれる
}

class Program{
static void m Main(string[] args){  }
       }

Programがクラス名です。ProgramというクラスにMainという関数(メソッド)が定義されています。


クラスは変数をもつことができます。フィールドと呼びます。
class SampleClass{
//フィールド
int IntValue=3;

//メソッドでフィールドを操作する

void samplemethod(){
this.IntValue=5; //thisは記述しなくてもよい
}
}
このようにクラスの中、メソッドの外に記事する変数をフィールド、またはメンバー変数と呼び、
''関数(メソッド)内で宣言する変数をローカル変数と呼びます。''
クラス内でフィールドを利用する場合、「this IntValue」のように「this」を記述すると
明示的に「クラス内のフィールド(変数)である」ことがわかります。
thisは省略可能ですが次の場合は「this」が必要です。
____________________________

class SampleClass{
//フィールド※
int IntValue=3;


//メソッドでフィールドを操作する
void samplemethod(){
int IntValue=3;//SampleClassと同じ変数名のローカル変数を用意してしまう。通常は別の名前で。


this.IntValue=5; //明示的にthisと記述することでローカル変数と区別できる(フィールド側の変数ですよ!)

//thisの指定がない場合ローカル変数に3が加算される
IntValue += 3;
}
}
//''結果※フィールドのIntValueは5に ローカル変数のIntValueは6となる
''関数(メソッド)内で宣言する変数をローカル変数と呼びます。

■クラスを利用する インスタンス生成する
クラスは利用することができます。
//クラスを変数に代入する
SampleClass sample = new SampleClass(); 

Classを変数に代入するこは「new」というキーワードを利用することから「new」する、
または、newされたクラスの「インスタンス」と呼ぶため、「インスタンスを生成する」といいます。
しかし、このままだとクラスの変数やメソッドが利用できません。
これはクラスやメソッドが公開範囲の指定ない場合は「private」に設定されているからです。
外部からのクラスの変数やメソッドを利用したい場合は公開範囲を「public」にします。※アクセス修飾子

クラスの公開範囲

ローカル変数とフィールドとスコープ

クラスが持つ変数はクラスが存在する限り可能ですが
メソッド内で宣言したローカル変数はそのメソッドに限り有効で、メソッドが終了すると変数も利用できなくなります。
変数が利用できる範囲をスコープといいます。

またC#では中括弧もスコープになる
//ifの中で変数を宣言する
if(true){int intValue=4;

//ここはスコープの範囲内なので変数の利用が可能
Console.WriteLine(intValue);
}
//ここはスコープの範囲外なので変数の利用ができない
Console.WriteLine(intValue);

ifに限らず中括弧だけ記述してスコープすることもできます
static voidMain(string[]args)
{
{int intValue=3; 
Console.WriteLine(intValue);//このように中括弧のみの記述も可能 ここでの表示は可能
}
//ここはスコープの範囲外なので変数の利用ができない
Console.WriteLine(intValue);}

クラスの公開範囲アクセス修飾子 詳細

クラスはそれ自体、もしくはクラスの持つ変数・メソッドの利用をどこまで許可するか指定できます。
クラスの公開範囲を指定することで、値の変更やメソッドも呼び出しをクラス内に制限したり、外部からの利用を許可したりできます。
アクセス修飾子

■private
class SampleClass{
//privateな変数はクラス内からのみ利用可能
private int intValue =3;

public void someMethod(){
//同じクラス内のメソッドからなら変更可能
this.intValue = 4;
 }
}
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
SampleClass sample = new SampleClass();
//クラス外から変数にアクセスすることはできない
//以下のコードはエラー
sample.intValue=5;

■protected
外部から呼び出せないが継承したクラスからは利用可能という公開範囲。継承については下項目で。

継承

継承とは
すでにあるクラスの機能をまるごと受け継いで新しいクラスを作る
class クラス名:継承元のクラス名{…処理内容}
class 派生クラス名 : 基底クラス名{ 派生クラスの定義 }

クラス名の後にコロン: をつけて継承元のクラス名を指定します。

機能を使われるほう(継承元)をスーパークラス(基底クラス)、機能を使うほう(継承先)をサブクラス(派生クラス)といいます。

「BはAから派生する」


※プラグイン オリジナル タグをつくろう 公式 http://jokerscript.jp/adv/next/plugin にもありましたね。
※UnityでC#スクリプトを作った時に「クラス名 : MonoVehaviour」と書いてあるのは、Unityに標準搭載されているMonoVehaviourクラスの機能を使わせてもらいますよということで、そのおかげで色々とUnity独自の便利機能が使えているわけです。

派生クラスは基底クラスの中にあるフィールドやpublicなメソッド(関数)をほぼ全て利用できます。
(privateは継承元のクラスでしか使えません)

派生クラスは基本ひとつのクラスからしか継承できません。

継承をつかったスクリプト例

詳細をみる

このスクリプトには見ての通り3つのクラスが存在します。
【1】Main関数を含んだクラス 要となるクラス コンソールに表示を行う
hanakoのみ【3】のクラスを使用している
【2】使用するフィールド(変数)やコンストラクタ、Main関数に対してnameとageのみをstring型にして値返す関数を含んだクラス

【3】Main関数に対して、表示する為string型にしてname含むaddress等の値を返す関数を含んだクラス
このクラスは【2】より継承されている。
thisのインスタンスはMainによって作られインスタンスです。hanako
【3】の中にはname、ageが無いのに問題なく利用できる点に注目して下さい。



継承 詳細

クラスは継承という機能を利用することで、元のクラスの機能を利用することができます。
class BaceClass{
//外部には公開しないがクラスで利用したい場合は『protected』アクセス修飾子を利用する 
protected int IntValue = 5; //フィールド

protected void  BaseMethod(){ 
   this IntValue = 4;
 }

//継承したいクラスをクラス名のあと、「:」を挟んで記述する。
class ExtendClass : BaceClass{ //BaceClassを継承するをExtendClass用意する


//ExtendClassは、BaceClassを継承してExtenMethodという関数(メソッド)を1つ追加した。
  public int ExtenMethod(){
  
  this.baseMathod(); //BaseClassのメソッドが利用可能
  
  return.this.IntValue; //BaseClassの変数(フィールド)も利用可能

  }

 }

}

継承元への代入

継承したクラスは、継承元のクラスに代入することができます。

動作がわかりやすいようにBaceClassにpublicなメソッド(関数)を用意します。

class BaceClass{
//外部には公開しないがクラスで利用したい場合は『protected』アクセス修飾子を利用する 
protected int IntValue = 5; //フィールド

protected void  BaseMethod(){ 
   this IntValue = 4;
 }

  public void basePublicMethod(){ //publicなメソッド(関数)を用意する
   }

 }


 継承する元のコード例

  ExtendClass ex = new ExtendClass(); //継承先のクラスExtendClassを「ex」として実体化「インスタンス生成」
  BaseClass baseClass =~ex; //''更に継承元であったクラスに代入''

  baseClass.basePublicMrthod(); //OK

  //ExtendClassのメソッドは呼び出せない。以下のコードはエラーとなる
   baseClass.extendMethod();

keisyo_dainyu.jpg
継承先のクラスExtendClassを「ex」として実体化「インスタンス生成」
更に継承元であったクラスに代入・・・概念的に継承元になってしまう

継承元のクラスに代入した場合、継承元として扱われるため、「extendMethod」のように継承先メソッドは呼び出せません。




メンバー変数

 クラス内であれば、変数はどこでも宣言できますが、括弧 {} のブロック内で宣言された場合、そのブロック内だけで有効です。
 宣言箇所で大きく 2 つに分類すると、「クラス内に直接宣言する変数」と「メソッド内に宣言する変数」に分類できます。

 クラス内に宣言する変数を、一般的な用語では「メンバ変数」とよび、C# では「フィールド」とよんでいます。

フィールドは、クラス内の複数のメソッドからアクセスすることができます。

 メソッド内に宣言する変数を「ローカル変数」とよび、そのメソッド内でのみ利用できます。
ローカル変数を利用する場合、その変数を参照する地点よりも前に宣言してあれば、どこに宣言してあっても構いません。

pubicなクラスとprivateなクラス

引用元

よくわかるC#

  • 最終更新:2016-03-03 02:55:14

このWIKIを編集するにはパスワード入力が必要です

認証パスワード