質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

Q&A

1回答

2581閲覧

修飾子 クラス メソッド名 {get;set;}の書き方について

dekky0910

総合スコア93

C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

0グッド

0クリップ

投稿2017/05/26 06:29

編集2017/05/26 08:57

###前提・実現したいこと
お世話になります。
今回質問表題のようなコードを目にして疑問に感じたため2点質問させていただきます。

###該当のソースコード

c#

1 2public class AAA 3 { 4 public BBB Data { get; private set; } 5 } 6 7public class BBB 8 { 9 public string sample { get; set; } 10 public string test { get; set; } 11 } 12 13public void main() 14 { 15 aaa = new AAA(); 16 . 17 . 18 . 19 . 20 . //ここでBBBの値を使いたい 21 }

###質問内容
1.クラスAAAのプロパティを使用する際 classAAA.Data.sample = "hoge";
このような使い方で間違いないのでしょうか?

2.newしてあるのにプロパティを用意する必要があるのかどうか疑問に感じたため質問いたしました。

ご教授よろしくお願いします。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

maisumakun

2017/05/26 06:31

Param型の定義はどこにありますでしょうか。
dekky0910

2017/05/26 06:34

申し訳ございません、記述ミスです。 正確にはBBBです、修正いたします
ozwk

2017/05/26 07:42 編集

聞きたいのは本当に「classAAA.Data.~~~と言う使い方で問題ないか」ですか?だとするとコードにclassAAAの定義がどこにもないんですが。
dekky0910

2017/05/26 08:52

情報が少なく申し訳ありません。 追記いたします
hihijiji

2017/05/26 09:28

タイトルとコードと質問内容に全くつながりがありません。 多分聞きたいことが沢山あって纏めに失敗したのだと思います。 聞きたいことの的を絞ってみましょう。
guest

回答1

0

AAA のインスタンスから sample を取り出すには以下のようにします。

C#

1public class AAA 2 { 3 public AAA() 4 { 5 Data = new BBB(); 6 } 7 public BBB Data { get; private set; } 8 } 9 10public class BBB 11 { 12 public string sample { get; set; } 13 public string test { get; set; } 14 } 15 16public static void main() 17 { 18 var aaa = new AAA(); 19 . 20 . 21 . 22 . 23 . //ここでBBBの値を使える 24 Console.WriteLine(aaa.Data.sample); 25 }

public BBB Data { get; private set; } という表記は、AAA に BBB 型の Data というプロパティを作成することを指示していますが、そのインスタンスは作成されません。既定値 null になります。したがって、BBB のプロパティを使うには、どこかでインスタンスを作成してプロパティにセットしなければなりません。ここで Data は private set; と宣言されていますので、通常は AAA 内でしか値をセットできません。そこで AAA のコンストラクタ内で BBB のインスタンスを作成して Data プロパティにセットしています。

  1. classAAA が AAA のインスタンス(上記コードでは aaa)を指すなら、それで正解です。
  2. new でインスタンス化されるのは、new の後ろに記述されたクラスだけで、そのプロパティは対象ではありません。new と同時にプロパティもインスタンス化するには、コンストラクタまたは自動実装プロパティ初期化子(ここでは記述していません。調べてください)でプロパティを初期化してください。

投稿2017/05/26 23:07

編集2017/05/26 23:19
Zuishin

総合スコア28660

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問