ここから本文です

C#のクラスの中のクラスについて。 人間クラスと車クラスを作りました。 人間...

アバター

ID非公開さん

2017/5/603:35:52

C#のクラスの中のクラスについて。

人間クラスと車クラスを作りました。
人間クラスの中の中に車クラスをいれて、人間がどんな車を持っているのか、というのを試したいです。

それぞれ同じNamespace内の同じクラス programに入っています。
しかし、どのように「人間クラス」からのオブジェクトAさんに、「車クラス」からのオブジェクトA車を持たせるのかがわかりません。

class program{

_public class Car{
__private string 車色;
__public void MyCarSetting(string color){
____this.車色 = color;
__}
_} //class Car閉じ

_public class Person{
__private string 氏名;
__private int 年齢;
__private Car myCar; ____//問題のタネです。
__public Person(string name, int age){
____this.氏名 = name;
____this.年齢 = age;
__}

_} // class Person閉じ
} // class Program閉じ


コンストラクタでPersonクラスで生成したAさんに氏名と年齢を与えることはできます。私はそこから、さらにそのAさんに車クラスから生成した車オブジェクトに「車色」を設定し、「Aさん」と「Aさんの車の色」をリンクさせたいのですが方法がわからないのです;

どのように設定すればよいのでしょうか;

閲覧数:
350
回答数:
1

違反報告

ベストアンサーに選ばれた回答

sch********さん

2017/5/613:28:23

private のメンバ変数がクラスであれintであれ、クラス外部からのアクセスはできませんから、
public なメソッドの引数として渡して代入します。
それか、publicのプロパティにしておけば渡しやすいですし、
初めからpublic にしておけば手抜きができます。

人と車をリンクすると言うことは、同じクラスのメンバにしておくのが一番分かりやすいです。
class program{
_private Data data;

_public class Data{
__private Person person;
__private Car car;

__//コンストラクタ
__private Data(string name, int age, string color){
___person = new Person(name, age);
___car = new Car();
___person.SetCar(car); //生成されたインスタンスを渡す
___//インスタンスを渡しているので、car.車色とpserson.myCar.車色は同じもの
___car.MyCarSetting(color);
___//person.myCar.車色のみに新しい色を設定、car.車色はblueのまま。
___person.CreateCar("red");
_} // class Data閉じ

_public class Car{
__private string 車色;
__public void MyCarSetting(string color){
____this.車色 = color;
__}
_} //class Car閉じ

_public class Person{
__private string 氏名;
__private int 年齢;
__private Car myCar; ____//問題のタネです。
__public Person(string name, int age){
____this.氏名 = name;
____this.年齢 = age;
__}
__//メンバmyCarに外部からインスタンスを引き渡す
__public void SetCar(Car car) {
___this.myCar = car;
__}
__//メンバmyCarに新規に生成する
__public void CreateCar(string color) {
___this.myCar = new Car();
___this.myCar.MyCarSetting(color);
_} // class Person閉じ

//データの入力
_void SetData()
_{
__//コンストラスタで入力
__data = new Data("name",20,"blue");
_}

} // class program閉じ

アバター

質問した人からのコメント

2017/5/12 08:21:38

皆さんありがとうございました!

みんなで作る知恵袋 悩みや疑問、なんでも気軽にきいちゃおう!

Q&Aをキーワードで検索:

Yahoo! JAPANは、回答に記載された内容の信ぴょう性、正確性を保証しておりません。
お客様自身の責任と判断で、ご利用ください。
本文はここまでです このページの先頭へ

「追加する」ボタンを押してください。

閉じる

※知恵コレクションに追加された質問は選択されたID/ニックネームのMy知恵袋で確認できます。

不適切な投稿でないことを報告しました。

閉じる