C#簡易入門6

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

C#簡易入門6

<<C#簡易入門5に戻る。C#簡易入門7をみる>>
  1. メソッド 戻り値についてのおさらい
  2. メソッド 引数についてのおさらい
  3. アクセス修飾子
  4. コンストラクタ
  5. オーバーロード
  6. デストラクタ
  7. プロパティ

  1. おさらい問題
  2. おさらい問題2
  3. おさらい問題3
  4. おさらい問題4
  5. おさらい問題5
  6. おさらい そのほか

https://www.slideshare.net/mobile/lucifuges/unityc Unityで覚えるC#

C#簡易入門7をみる>>
<<C#簡易入門5に戻る
メニューに戻る

メソッド 戻り値についてのおさらい

プロパティを習う前に 引数について習得すること、その為には戻り値について習得すること

詳細をみる

~流れ~詳細をみる

メソッド 引数のおさらい

プロパティを習う前に 引数について習得すること

詳細をみる


詳細をみる~流れ~


stingint.JPG


アクセス修飾子

public どこからでもアクセスできる
internal 同じアセンブリ内からは自由にアクセスできるというものです。
private 同じクラス内のみアクセスできる(クラスでは使えない。クラスの中でのみ)
protected 同じクラス内、派生クラス(継承によってつくられたクラス)の中でのみアクセスできる(クラスでは使えない。クラスの中でのみ)

アクセス修飾子を省略するとプライベートなメンバとしてみなされます。
※「アセンブリ」・・・同じアプリ内に組み込まれているクラス類。プロジェクトの中に作ってあるクラスの間
publicはアクセス修飾子の種類のひとつです。すべてのものからアクセスできることを示します。
アクセス権の指定を何も書いてない場合は、クラスのフィールドやメソッドは「private」、クラスは「internal」に設定されます。

クラスの中にあるフィールドやメソッドはそのクラス(クラスから作ったインスタンス)を利用する上で必要な機能ですが、
そのクラスを使うのにすべてのフィールドやメソッドが使えるようになっていると困ることがあります。
例えば、「特定のプログラムの中だけで利用し保管したいフィールド」,「勝手に値を変更されたら困るフィールド」です。

アクセス権は、クラス自身だけではなく、クラス内にあるフィールドやメソッド(関数)に設定できます。
(ただし クラスに使えないアクセス権もあり)

コンストラクタ

ーPerson taro = new Person(); //Personクラスのインスタンス「taro」の作成※1
 taro.set_Data("太郎",30);  //set_Dataの関数を利用します。引数※3 s nに値を設定します。「string name」「int age」
string taro_data = taro.print_method(); //print_methodの関数を利用して表示
引数を使うにしても、newでPersonクラスのインスタンス「taro」の作成後、set_Dataの関数を利用して引数を利用・・・って面倒ですね
newするとき際に一緒に引数で必要なデータを設定できるようにするには「コンストラクタ」を利用します。
「newでインスタンスを作るときの諸設定」を行うために用意されているのが「コンストラクタ」と呼ばれる特別なメソッド(関数)です。

konsut.jpg
■コンストラクターは「戻り値」のないメソッド(関数)

コンストラクターの定義

クラス名(引数)

 ~実行する処理~
 }
__________________
クラス名と同じ名前の戻り値のないメソッド(関数)として定義される
class SampleClass
{
// ↓これがコンストラクター
 SampleClass()
 {
   // インスタンスの初期化用のコードを書く
 }
}

戻り値の型は記述しない。戻り値はできない。


コンストラクターを使ったスクリプト

詳細をみる


コンストラクター 詳細

C#簡易入門7のクラスを見てからみるとよい。

コンストラクタは値を戻すことがないので戻り値が必要ないことに注目してください。
またコンストラクタも関数同様に引数別に用意することができます。
class SampleClass(){
int intValue=3;

//インスタンスの作成時に引数がないコンストラクタ
public void SampleClass(){
 this.IntValue =7;
}
//int型の引数を受けるコンストラクタ
public void SampleClass(int intArg){
 this.IntValue =intArg;
}

}



//引数ないコンストラクタが呼び出される
 SampleClass.sample = new SampleClass();
//int型の引数を取るコンストラクタが呼び出される
 SampleClass.sample = new SampleClass(4);

■インスタンス生成時に値を指定する
class SampleClass{
 public int IntValue;
 pubili string Name;
}//コンストラクタがないクラス
~~~~~~~~~~~~~~~~~~~~~~~次の様に記述することで指定することができる。~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
 SampleClass.sample = new SampleClass(){IntValue=4, Name="西村"};


オーバーロード

コンストラクターをたくさん用意します。コンストラクターのことを知ってから読んでください。

詳細をみる

説明

詳細をみる


コンストラクターとは?
コンストラクタも特殊なメソッドの仲間。同じ名前のメソッドをいくつも書いている。
いくつも同じメソッド(コンストラクター)を用意することを「オーバーロード」という。
しかし全く同じメソッド(コンストラクター)は、複数おけない。
引数や戻り値(返値)が違っていればいくつでも書ける。
「インスタンスを作るときに実行する処理」

デストラクタ

デストラクタ

インスタンスが削除されたとき実行する処理
~クラス名(){

・・・実行する処理・・・・

}

プロパティ

フィールドは値をを保管するのに便利であるが、publicを指定して外部から自由に書き替えできるようにすると、後で望ましくない値を
設定された可能性もある。
例として マイナスが無い値で(年齢ageに)マイナスを設定してしまうなど。
こういった事がないように考えられたのが「プロパティ」

プロパティは、フィールドの値を取得と変更のための処理を組み込むことができるフィールドです。 

プロパティの書き方
______________________
フィールドの宣言{
 get{・・・値の取得・・・}
set{・・・値の変更・・・}※1

______________________

例 プロパティ

      ''public string name''{
           get { return myname; }
           set { }

      }

フィールドの後に{}をつけて その中に「get」「set」というものを用意します。


「set」・・・値を変更するためのもの「set」がなかったら値を変更することができません。

「get」・・・値を取り出すためのもの「get」がなかったら値を取り出すことができません。
''
※1 「set」と「get」を用意するかで読み書きを許可するしないを決定します。''

プロパティをつかったスクリプト(処理分岐無)

まずは分岐処理無しにプロパティ使っただけのスクリプトです。(そのままマイナスと表示されます。)
プロパティにあたる部分はどこでしょうか?

詳細をみる



実行結果
value.JPG
valueとするとそのまま表示されます。

    private string myname;
     //プロパティ
       public string name{
           get { return myname; }
           set { myname = value; }

      }

      private int old;
       //プロパティ
       public int age{
           get { return old; }
           set { old = value; }

      }


両方とも一度、privateに値を渡しています。

コンストラクターも  private string myname;   private int old; を使っています。

プロパティをつかったスクリプト (処理分岐あり)

詳細をみる

実行結果
puropaty_jkou.JPG

詳細をみる


説明

setに分岐処理を加えて不正な値を回避

詳細をみる


public int age{
         get { return old; }
          set {
              if (value < 0) { old = 0; }
              else { old = value; }
              }
    //マイナスなら0を設定する

おさらい問題

プロパティ、メソッド、オーバーライド、コンストラクターを問題をみて当てたはめましょう。

【1】これは何?
new したときに呼び出される特殊なメソッド。
クラス名と同じ名前で定義する。
例えば、class Person { public Person(string name) { ... } ... }

【2】これは何?
public int age{get { return old; }
          set {if (value < 0) { old = 0; } else { old = value; } }

答えをみる


おさらい問題2

詳細をみる


答え


おさらい問題3

詳細をみる


string paty1_data = p1.print_method();で関数print_methodを利用しdataに値に保存させる(表示方法もstringなどで決定される。)

答え


おさらい問題4

おさらい問題3と見比べてみよう!

詳細をみる

引数を使用したスクリプト
 p1.name = "太郎"; p1.job = "勇者"; p1.hp = 200; p1.mp = 100;と延々と書いていた部分を無くして
p1.set_Data("太郎","勇者",200,100);と書いています。
関数set_Dataには()の中に順番に型と記号となる英字を書いています。(引数)
public void set_Data(string s, string n,int x,int m)
その記号はどれに当てはまるのか関数set_Dataの中で当てはめています。
name = s; job = n;・・・・
pt_hikisu.JPG

延々と書く手間がなくなりましたし、簡単に二人目のパーティーがつくれそうですね。
さて、これを利用してパーティーメンバー花子をつくるにはどのようにしたらいいでしょうか?およその答えが浮かびますか?
hikisu_pt2.JPG

答えをみる


おさらい問題5

おさらい問題4と見比べてみましょう!
コンストラクターを使ったスクリプト

詳細をみる


newするとき際に一緒に引数で必要なデータを設定できるようにする為、コンストラクターを使いました。

set_Dataはコンストラクターに変更したので存在しない関数なので「p1.set_Data();」と「p2.set_Data();」は消しました。
代わりにコンストラクターprintState(クラスと同じ名前がお約束)を用意しました。

表示はこのような形です。
hikisu_pt2.JPG

このスクリプトでは
前項目のpublic void set_Data(string s, string n,int x,int m) と public printState(string s, string n,int x,int m) 自体には大した変更はありません。やってることは同じ。大きな違いは、newするとき際に一緒に引数で必要なデータを設定できるようになったことでしょう。

おさらい そのほか

※ReadKeyについて
Console.ReadKey();これは、押したキーを読み取るメソッドです。
これがあると、プログラムはユーザーが何かのキーを押すまで待ち続け、キーが押されるとその情報を取得して返します。
、これを用意することで、勝手に終了しないようにできるわけです。これで、作成したEXEをダブルクリックして実行しても、瞬時にウインドウが消えてしまったりしなくなります。
(#Cの中だけの話 Unityは違うよ)

■処理 Main Main メソッドは、アプリケーション起動時に最初に呼び出されるメソッドです。
namespace ConsoleApplication2
{
    class Program1{
        static void Main(string[] args){
            Console.WriteLine("Program1の関数だよ");
            Console.ReadKey();
        }
    }


    class Program2{
        static void print()
        {
            Console.WriteLine("Program2の関数だよ");
            Console.ReadKey();
         }

    }
}

この記述のみの場合はMainしか表示されない。

■エントリポイントとは、コンピュータプログラムを構成するコードのうち、最初に実行することになっている位置のこと。
C# プログラムでは、エントリ ポイントは 1 つだけに限られます。

おさらい そのほか2

※「new クラス」というものは、「インスタンス」を作成するためのものです。
インスタンスというのは、クラスをメモリ内にコピーして自由に利用できるようにしたものです
このように「newを使ってインスタンスを作り、それを操作する」というのが、クラス利用の基本なのです。

次のページで継承について理解を深めるためにインスタンスについて復習しましょう。
class Person
{
   public string name;
   public int age;
}
名前(name)と年齢(age)の情報を含むPersonというきわめてシンプルなクラス
■クラスを定義するには、classというキーワードに続き、クラスの名前を記述する。その後の中括弧({})の内部がクラスの内容となる。
■stringは文字列型を示すデータ型、intは整数型を示すデータ型のキーワードである。
■手前に付いているpublicはプログラム内外のどこからでもアクセス可能であることを示す。

''クラスの中で行われた変数宣言は、実際の変数は作成されない。
なぜならクラスとは設計図なので、これは「変数を作りなさい」という指示を書き込んだと見なされるのであって、
変数そのものを作れという指示ではないのである。
この変数が本当に作成されるのは、クラスのインスタンスが作られたときである。''


インスタンスを作るにはどうしたらよいのしたらいいでしょうか?
メソッドを作るとして、中にはどの様に書くといいでしょうか?

【1】test()というメソッドの中で、Personというクラスを利用
void test(){
   Person taro;
   Console.WriteLine(taro.name);
}

答えをみる


【2】newキーワードを書き込む。
void test(){
  Person taro;
  taro = new Person();
   Console.WriteLine(taro.name);}

答えをみる


static public void test() {
  Person taro;
   taro = new Person();
   taro.name = "太郎";
   taro.age = 20;
   Console.WriteLine(taro.name);
  }

答えをみる


引用元 http://www.atmarkit.co.jp/ait/articles/0209/04/news001.html 詳しくはここを参照

引用元

http://libro.tuyano.com/index3?id=1247003 ほか
http://www.atmarkit.co.jp/ait/articles/0209/04/news001.html

  • 最終更新:2016-03-01 01:09:02

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

認証パスワード