- 締切済み
C# override
某C#の入門書のサンプルですが、overrideがよくわかりません。 using System; using System.Collections.Generic; using System.Text; namespace PersonList { class Person { public string name; public int age; public Person(string nam, int ag) { name = nam; age = ag; } public override string ToString() { return String.Format("{0}({1})", name, age); } } class Program { static void Main(string[] args) { List<Person> p = new List<Person>(); p.Add(new Person("Pochi", 3)); p.Add(new Person("Kenta", 5)); p.Add(new Person("Mari", 4)); p.Add(new Person("Wanko", 1)); p.Add(new Person("Doggy", 4)); p.ForEach(Console.WriteLine); } } } 1.overrideをしないと 「PersonList.Person」が出力されてしまうのですが なぜToString()をoverrideするのかがわかりません。 2.override しないですべての内容を出力するためにはどうしたら いいのでしょうか?
- みんなの回答 (1)
- 専門家の回答
みんなの回答
- maru_yoshi_
- ベストアンサー率39% (17/43)
>1.overrideをしないと 「PersonList.Person」が出力されてしまうのですが > なぜToString()をoverrideするのかがわかりません ご自身で理由を書いているじゃないですか。 > 「overrideをしないと 「PersonList.Person」が出力されてしまう」 って。 この場合のToStringのデフォルトの動作は、"namespace.class"を返すと思います。 このデフォルトの動作を変えるため、overrideによりToStringの動作を変更してるんです。 > 2.override しないですべての内容を出力するためにはどうしたら > いいのでしょうか? 現在実装されているToStringと同様な動作をする関数を作って呼び出す(呼び出し側も変える必要がある)。 でも、現状のToStringをoverrideするやりかたの方がスマートですね。 なぜoverrideしない方法を求めているのでしょうか? そもそもpverrideの意味を分かっていない(つまり継承等の概念がわかっていない)とか?
お礼
Console.WriteLineの意味(value の ToString メソッドを呼び出して文字列形式を生成し、その文字列を標準出力ストリームに書き込みます。) がわかっていなかった事に気がつきました。 ありがとうございました。