【Aモデル録 フェーズ1 C#基礎】
これは、「参照について」の沼に落ちた私と、懸命な救助をするAI先生が疲れ果て、
遊び心で作られたものです。
※笑って読んでください
この物語は、参照型の便利さと危険性を理解するためのフィクションです。
プログラムでは、この話の登場人物を、どんどん増やすことができます。
※コウとカイは、
プログラムの考え方を説明するために登場する
架空のキャラクターです。
実在の人物・団体とは一切関係ありません。
とある学校の教室。
クラスの中には、コウ、カイ、Hyve という、仲のいい3人の生徒がいます。
コウ:「校長先生、僕「パンダ」を覚えたよ。」
校長:「それはいいね! じゃあ、学校の公式メルマガ使っていいよ。
担任のMain先生、号令お願いしますね。」
Main先生:「わかりましたぁ。 では、みんな集合! コウくん!」
コウ:「はーい! じゃあ、つぶやいてっと。 カイーー!」
カイ:「はーい! おお!パンダか。 僕もつぶやくー。 Hyveーー!」
Hyve:「はーい! ほぉー。パンダねぇ。 僕もつぶやくー♪」
みんなパンダを知ることができました。
まず、生徒たちを集める部屋(=クラス)を作ります。
class Student
{
}
「部屋の名前がStudent?」だとか、「学級がクラスで、クラスが・・・え?」とか、細かいことは気にしない!(笑)
とりあえず、部屋の名前があればいいんです。
生徒たち(=メソッド)は名前を呼ばれると、任せてもらった役目を責任を持って実行します。
生徒同士の約束は、お互いに参照した情報を秘密にしない(=公開する)こと。
class Student
{
public void Koh()
{
}
public void Kai()
{
}
public void Hyve()
{
}
}
コウが「パンダ」という文字列を覚えます。
public void Koh()
{
string panda = "パンダ";
}
校長先生は、プログラマー。 あなたです。 細かいことは気にしません!
公式メルマガにしたいので、ここに書きます。
class Student
{
string pandainfo;
・・・
(以下略)
Main()は、プログラムを実行するための号令役です。
なので、担任の先生として、職員室に出現してもらいましょう。
Studentクラスの外に書きます。
class Teacher
{
static void Main()
{
}
}
Main先生がStudentクラスへ呼びかけられるようにします。
class Teacher
{
static void Main()
{
var student = new Student(); // ← まず Student を new する!
}
}
解説の進行の都合上、まだコウは呼びません(笑)
コウの仕事です。
public void Koh()
{
string panda = "パンダ";
pandainfo = panda;
Console.WriteLine($"Kohです。僕は「{panda}」の参照URLを教えます。");
Kai();
}
カイの仕事です。
public void Kai()
{
Console.WriteLine($"Kaiです。僕は「{pandainfo}」を調べます。");
Hyve();
}
Hyveの仕事です。
カイが配布したメルマガのURLにアクセスして、得た内容を参照してつぶやきます。
public void Hyve()
{
Console.WriteLine($"Hyveです。僕は「{pandainfo}」を母に伝えます。");
}
みなさんにつぶやいてもらえるようになるには、コードの先頭に「using System;」という記述が必要です。
using System;
class Student
{
・・・
(以下略)
class Teacher
{
static void Main()
{
var student = new Student();
student.Koh(); // ← インスタンスから呼ぶ!
}
}
「インスタンスって何よ?」・・・ここではスルーしてください。
using System;
class Student
{
string pandainfo;
public void Koh()
{
string panda = "パンダ";
pandainfo = panda;
Console.WriteLine($"Kohです。僕は「{panda}」の参照URLを教えます。");
Kai();
}
public void Kai()
{
Console.WriteLine($"Kaiです。僕は「{pandainfo}」を調べます。");
Hyve();
}
public void Hyve()
{
Console.WriteLine($"Hyveです。僕は「{pandainfo}」を母に伝えます。");
}
}
class Teacher
{
static void Main()
{
var student = new Student();
student.Koh();
}
}