
某サイトで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#を知っている人がいればよいのですが、残念ながらいません。
ネットと本では理解しきれないのでアドバイスをお願いします。
よろしくお願い致します。
No.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を実行」だけにしておいた方がよいと思います。
返事が遅くなって申し訳ありません。
詳しく説明していただき大変勉強になります。
頂いた回答を熟読して理解を深めたいと思います。
投稿してから自分なりに勉強を進め、ぼやけていたところが
kmee様のアドバイスで明るくなってきました。
ありがとうございました。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
Vba Replace関数について教えて...
-
CSSが全く分かりません、お助け...
-
CPUが16bitでも32bitOSでコンパ...
-
最初に聞かれたこと
-
DLLファイルの逆コンパイラにつ...
-
C言語 関数、変数の宣言について
-
C言語でファクト関数を使わずに...
-
あってる
-
DNCL(共テ用プログラミング言語...
-
バッチファイルで以下のような...
-
visual studio 2022でのC#プロ...
-
プログラミングc++を全く分か...
-
DNCL(共テ用プログラミング言語...
-
C言語 配列と関数の練習問題
-
gccを行ってもexeファイルが生...
-
c言語
-
VisualStudio2022でC言語プログ...
-
ストリームについて。
-
Cのオブジェクトファイルの逆ア...
-
Windows Formアプリからコンソ...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
既定のコンストラクタがない?
-
FriendとPublicの違い。。。
-
(UWSC) 「#32770」の意味わかり...
-
ダイアログ表示時にチェックボ...
-
イベントにAddHandlerされてい...
-
エディットコントロールでEnter...
-
オーバーライド関数の呼び出し...
-
このコンパイルエラーの意味に...
-
【ASP.NET】 独自で作成したク...
-
MFC モードレスDlgについて
-
[MFC] CWnd::MessageBoxの警告...
-
ボタンのオーナードローについて
-
MessageBoxを継承したい
-
ダイアログクラスのコントロー...
-
vba sendKeysを送る相手のソフ...
-
エディットコントロールのイベ...
-
Delphi6 DLL内でのメモリ共有(?)
-
個々の関数について継承してい...
-
privateなメンバ関数をテストす...
-
WindowsAPIのリストビューの...
おすすめ情報