重要なお知らせ

「教えて! goo」は2025年9月17日(水)をもちまして、サービスを終了いたします。詳細はこちら>

電子書籍の厳選無料作品が豊富!

某サイトでC#の練習問題があります。
練習問題と回答があり、とても重宝していますが、
回答に解説がなく、大事なところの理解が進みません。

以下の回答を自分なりに理解しようとしているのですが、
認識が正しいのか不安です。コメント行が私の認識ですが、
あっているのでしょうか?ご指導をお願いします。



練習問題 7 - 1
以下の Dog クラスを使用して、次のプログラムを作成しなさい。
・Dog クラスのインスタンスを作成する。
・Name プロパティで名前を設定する。
・ShowProfile メソッドで名前を表示する。

回答

class Dog  //"Dog"クラスの宣言
{
private string mName = ""; // "mName"の宣言と初期化

public string Name      //"Name"プロパティの宣言
{
get { return mName; } // メインプログラムに"ぽち"を返す
set { mName = value; } // "mName"にメインプログラムからきた"ぽち" をセットする
}

public void ShowProfile() //"ShowProfile"プロパティ宣言
{
Console.WriteLine(mName); //プロンプトに"mName(ぽち)"を表示
}
}

ーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーー

class Exercise          //"Exercise"クラスの宣言
{
static void Main(string[] args) //メインプログラムの宣言
{
Dog MyDog = new Dog(); //"Dog"インスタンス宣言と初期化

MyDog.name = "ぽち"; //"name"に"ぽち"を設定し、"Dog"クラスへ代入
MyDog.ShowProfile(); //"Dog"クラスの"ShowProfile"を実行
}
}


近くにC#を知っている人がいればよいのですが、残念ながらいません。
ネットと本では理解しきれないのでアドバイスをお願いします。

よろしくお願い致します。

A 回答 (2件)

大体流れは見えていると思いますが、細かいことをいくつか。



プログラムを混乱しないで理解するコツは、
 「それはそれ、これはこれ」と分けて考える
ことだと考えています。


> get { return mName; } // メインプログラムに"ぽち"を返す
> set { mName = value; } // "mName"にメインプログラムからきた"ぽち" をセットする
> Console.WriteLine(mName); //プロンプトに"mName(ぽち)"を表示

クラスをどうやって使う、ということを意識するのは大切です。
ですが、このコメントでは、それに限定されているかのように見えます。

呼び出し側での具体的な指定と、クラスの定義とは分けて考えましょう。


例えば Exercise{クラスに

public static void yours() {
 Dog YourDog = new Dog();
 YourDog.name = "シロ";
 YourDog.ShowProfile();
}

と追加したら
呼び出し側は「メインプログラム」では無いし、内容も「ぽち」でもありません。
Nameプロパティは「ぽち」?「シロ」?と混乱しなければいいのですが。


> MyDog.ShowProfile(); //"Dog"クラスの"ShowProfile"を実行

まだそこまでやっていないかもしれませんが
「"Dog"クラスの"ShowProfile"を実行」だと、クラスメソッドのようにも見えてしまいます。
実際にはインスタンスメソッドです。

C#にはクラスの継承、メソッドのオーバーライドといった仕組があります。
このため、 Dog MyDog と Dogクラスの変数 MyDog を使っているからといって、 MyDog.ShowProfile() が「"Dog"クラスの"ShowProfile"」では無いケースがあります。

デバグ時には、どのクラスのShowProfileなのか、具体的に確認する必要はあります。
ですが、この行を理解するには「MyDogのShowProfileを実行」だけにしておいた方がよいと思います。
    • good
    • 0
この回答へのお礼

返事が遅くなって申し訳ありません。

詳しく説明していただき大変勉強になります。
頂いた回答を熟読して理解を深めたいと思います。

投稿してから自分なりに勉強を進め、ぼやけていたところが
kmee様のアドバイスで明るくなってきました。

ありがとうございました。

お礼日時:2017/10/24 13:57

ほぼ合っていますよ。


細かいところをいえば下記になります。

"ShowProfile"プロパティ宣言→"ShowProfile"メソッド宣言
"name"に"ぽち"を設定し、"Dog"クラスへ代入→"Dog"クラスである"MyDog"の"name"プロパティに"ぽち"を設定。"name"プロパティによって"mName"に代入される
    • good
    • 0
この回答へのお礼

返事が遅くなって申し訳ありません。

的確なアドバイスありがとうございます。
細かい所が重要ですので、勉強になりました。

ありがとうございます。

お礼日時:2017/10/24 13:53

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!