・p.160「メソッドを定義しよう」から
p.160 メソッドを定義しよう
・実行用で特別な性質を持つのがMainメソッド(非インスタンス(静的)メソッド)
・とは異なる通常のメソッドをプログラマが記述できる
・通常のメソッドはクラスに所属するのでインスタンスメソッドといい、インスタンスの持つデータを扱うのに便利
・例: MonsterクラスにHoimiメソッドとデータメンバhp、mpを定義し、インスタンスRimuruをnewsすると、
「Rimuru.Hoimi()」を実行する事で、Rimuru.mpを減らし、Rimuru.hpを増やせる
・メソッドは値を0または1個返すことができる
・0個返すメソッド=何も返さないメソッドには戻り値型(返却値型)としてvoidを指定する
・1個返すメソッドには戻り値型を指定する。また、内部に1つ以上の「return ●」を記述する
・例:整数の和を返すメソッドは戻り値型も整数
・メソッドのカッコ内には引数群を0個以上記述できる。これをパタメータのリストともいう
・引数はメソッドの呼び出し時に与えたいデータで「型 引数名」でカンマ繋で記述する
・例: int add(int a, int b){ int c = a + b; return c; } //整数2値の和を返すメソッド
p.161 method01.cs
//p.161 method01.cs
using System;
class MyClass { //method01クラスで用いられるクラス
public int Add(int x, int y) { //2つの整数の引数を受け取って整数和を返すメソッド
int z; //メソッド内でのみ用いる変数(ローカル変数)
z = x + y; //2つの整数の引数の和を代入
return z; //変数zの値を返す
}
}
class method01 {
public static void Main() {
MyClass a = new MyClass(); //利用したいクラスのインスタンスを生成
int sum; //合計用の変数(ローカル変数)
sum = a.Add(100, 200); //インスタンスにあるメソッドに2整数を渡して呼び、結果を変数に代入
Console.WriteLine("sum = {0}", sum); //変数の値(合計値)を表示
}
}
アレンジ演習:p.161 method01.cs
・MyClassクラスにint型のインスタンス変数xを追加する ・そして、AddメソッドをAdd(int a)に変更し、引数の値とxの値の和を返すようにしよう ・Mainメソッドで、インスタンス変数xに適当な値を与えてから、Addメソッドを呼びだすこと。
作成例
//アレンジ演習:p.161 method01.cs
using System;
class MyClass { //method01クラスで用いられるクラス
public int x; //【追加】インスタンス変数
public int Add(int y) { //【変更】整数の引数を受け取ってxとの和を返すメソッド
return x + y; //インスタンス変数xと引数yの和を返す
}
}
class method01 {
public static void Main() {
MyClass a = new MyClass(); //利用したいクラスのインスタンスを生成
Console.Write("加算値:"); a.x = int.Parse(Console.ReadLine()); //インスタンス変数の値を代入
Console.WriteLine("100に加えると{0}", a.Add(100)); //合計値を表示
Console.WriteLine("200に加えると{0}", a.Add(200)); //合計値を表示
Console.WriteLine("300に加えると{0}", a.Add(300)); //合計値を表示
}
}
p.163(実引数と仮引数)
・メソッドの定義における引数を仮引数ともいい、メソッドの中でのみ変数と同様に利用できる ・メソッドの呼び出しにおける引数を実引数ともいい、値や式(変数)を指定できる ・実引数から仮引数へは値のコピーが行われる(値渡し) ・この時、実引数には名前は不要で、指定順に仮引数に渡されていく ※これを明示するために、実引数と仮引数に渡す変数名は同じにしないことが望ましい
p.163 bmiclass.cs
//p.163 bmiclass
using System;
class BMI { //インスタンス変数とメソッドを持ち利用されるクラス
private double blm; //身長(m単位):インスタンス変数(クラス内部用)
public double Calc(double bl, double bw) { //身長を体重を受取ってBMI値を返すメソッド
blm = bl / 100.0; //m単位に換算し、インスタンス変数に格納
return bw / Math.Pow(blm, 2.0); //BMIを算出して返す
}
}
class bmiclass {
public static void Main() {
string strBl, strBw; //入力用
double blcm, bwkg;
Console.Write("身長(cm)---");
strBl = Console.ReadLine();
blcm = Double.Parse(strBl);
Console.Write("体重(kg)---");
strBw = Console.ReadLine();
bwkg = Double.Parse(strBw);
BMI bmi = new BMI(); //BMI計算用のクラスのインスタンスを生成
Console.WriteLine("BMIは{0:#.##}です", bmi.Calc(blcm, bwkg)); //身長と体重をメソッドに渡す
}
}
アレンジ演習:p.163 bmiclass
・BMIクラスに計算式を返すSentenseメソッドを追加しよう ・Calcメソッドの実行により、インスタンス変数blmには身長(m単位)が格納されるので、これを用いて 「体重を【blmの値】の2乗で割った結果です」と表示しよう
作成例
//アレンジ演習:p.163 bmiclass
using System;
class BMI { //インスタンス変数とメソッドを持ち利用されるクラス
private double blm; //身長(m単位):インスタンス変数(クラス内部用)
public double Calc(double bl, double bw) { //身長を体重を受取ってBMI値を返すメソッド
blm = bl / 100.0; //m単位に換算し、インスタンス変数に格納
return bw / Math.Pow(blm, 2.0); //BMIを算出して返す
}
public string Sentense() { //【追加】説明文を返す
return "体重を" + blm + "の2乗で割った結果です"; //インスタンス変数の値を再利用
}
}
class bmiclass {
public static void Main() {
string strBl, strBw; //入力用
double blcm, bwkg;
Console.Write("身長(cm)---");
strBl = Console.ReadLine();
blcm = Double.Parse(strBl);
Console.Write("体重(kg)---");
strBw = Console.ReadLine();
bwkg = Double.Parse(strBw);
BMI bmi = new BMI(); //BMI計算用のクラスのインスタンスを生成
Console.WriteLine("BMIは{0:#.##}です", bmi.Calc(blcm, bwkg)); //身長と体重をメソッドに渡す
Console.WriteLine(bmi.Sentense()); //【追加】説明文を受け取って表示
}
}
アレンジ演習:p.163 bmiclass
・Shar(身長180cm、体重75kg)とAmuro(身長170cm、体重60kg)のBMIの差を表示する処理を追加しよう
作成例
//アレンジ演習:p.163 bmiclass
using System;
class BMI { //インスタンス変数とメソッドを持ち利用されるクラス
private double blm; //身長(m単位):インスタンス変数(クラス内部用)
public double Calc(double bl, double bw) { //身長を体重を受取ってBMI値を返すメソッド
blm = bl / 100.0; //m単位に換算し、インスタンス変数に格納
return bw / Math.Pow(blm, 2.0); //BMIを算出して返す
}
public string Sentense() { //【追加】説明文を返す
return "体重を" + blm + "の2乗で割った結果です"; //インスタンス変数の値を再利用
}
}
class bmiclass {
public static void Main() {
string strBl, strBw; //入力用
double blcm, bwkg;
Console.Write("身長(cm)---");
strBl = Console.ReadLine();
blcm = Double.Parse(strBl);
Console.Write("体重(kg)---");
strBw = Console.ReadLine();
bwkg = Double.Parse(strBw);
BMI bmi = new BMI(); //BMI計算用のクラスのインスタンスを生成
Console.WriteLine("BMIは{0:#.##}です", bmi.Calc(blcm, bwkg)); //身長と体重をメソッドに渡す
Console.WriteLine(bmi.Sentense()); //【追加】説明文を受け取って表示
BMI Shar = new BMI(); //SharのBMI計算用のインスタンスを生成
BMI Amuro = new BMI(); //AmuroのBMI計算用のインスタンスを生成
double s = Shar.Calc(180, 75); //SharのBMIを得る
double a = Amuro.Calc(170, 60); //AmuroのBMIを得る
Console.WriteLine("SharとAmuroのBMIの差は{0}", s - a); //差を表示
}
}
参考:応用例:名前とbmi値をオブジェクトに持たせてみよう
//アレンジ演習:p.163 bmiclass
using System;
class BMI { //インスタンス変数とメソッドを持ち利用されるクラス
public string name; //名前
public double bmi; //BMI値
private double blm; //身長(m単位):インスタンス変数(クラス内部用)
public double Calc(double bl, double bw) { //身長を体重を受取ってBMI値を返すメソッド
blm = bl / 100.0; //m単位に換算し、インスタンス変数に格納
return bmi = bw / Math.Pow(blm, 2.0); //BMIを算出して返す
}
public string Sentense() { //【追加】説明文を返す
return "体重を" + blm + "の2乗で割った結果です"; //インスタンス変数の値を再利用
}
}
class bmiclass {
public static void Main() {
string strBl, strBw; //入力用
double blcm, bwkg;
Console.Write("身長(cm)---");
strBl = Console.ReadLine();
blcm = Double.Parse(strBl);
Console.Write("体重(kg)---");
strBw = Console.ReadLine();
bwkg = Double.Parse(strBw);
BMI bmi = new BMI(); //BMI計算用のクラスのインスタンスを生成
Console.WriteLine("BMIは{0:#.##}です", bmi.Calc(blcm, bwkg)); //身長と体重をメソッドに渡す
Console.WriteLine(bmi.Sentense()); //説明文を受け取って表示
BMI Shar = new BMI(); //SharのBMI計算用のインスタンスを生成
Shar.name = "アズナブル";//【追加】
BMI Amuro = new BMI(); //AmuroのBMI計算用のインスタンスを生成
Amuro.name = "レイ";//【追加】
Shar.Calc(180, 75); //SharのBMIを得る //【変更】
Amuro.Calc(170, 60); //AmuroのBMIを得る //【変更】
Console.WriteLine("{0}と{1}のBMIの差は{2}", Shar.name, Amuro.name, Shar.bmi - Amuro.bmi); //【変更】差を表示
}
}