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

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

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

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

Visual Studio

Microsoft Visual StudioはMicrosoftによる統合開発環境(IDE)です。多種多様なプログラミング言語に対応しています。

Q&A

解決済

3回答

1209閲覧

public なクラスのプロパティを参照するにあたり

Corona

総合スコア14

C#

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

Visual Studio

Microsoft Visual StudioはMicrosoftによる統合開発環境(IDE)です。多種多様なプログラミング言語に対応しています。

0グッド

0クリップ

投稿2020/04/11 04:48

編集2020/04/11 04:51

以前、publicな変数に関して、以前質問させていただきました。
そして、VBのpublic変数のように、どのクラスからも参照できることについて教えて頂きましたが、私は理解できなかったようでした。
C#の解説書の中ではできるのに、私がVisual Studioの中で実現しようとするとできないのです。
下記のような処理をしました。

C#

1namespace Test 2{ 3 public partial class InputWindow : Window 4 { 5 public string TheStr { get; set; } 6 // ここで文字を入力して、その値をsText 7 // string sText = ( input text ) 8 // に入れています。 9 // で、 10 TheStr = sText; 11 // としました。 12 } 13}

このあと別のクラスから、下記のように、InputWindowの TheStr を参照したいのです。

C#

1namespace Test 2{ 3 class GetText 4 { 5 InputWindow inputWin = new InputWindow(); 6 string s = inputWin.TheStr; 7 } 8}

とのような方法なのですが、s = null にしかならないのです。

今回の処理のおおまかな内容は、
InputWindowで、文字列を入力して、別のクラスでその値を参照したいということです。

publicなプロパティTheStrを別のクラスGetTextから参照したいのですが、
何かがおかしいせいとおもいますが、そのおかしい点をご指摘ください。

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

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

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

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

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

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

Zuishin

2020/04/11 04:53

コンパイルできないので、説明と食い違っています。
Zuishin

2020/04/11 04:57

コードは一文字の違いでも動作が変わるので、雑に書くのではなく、コンパイルでき、問題が再現する最小のコードを新しく作成し、それを掲載してください。省略していいのは、using や namespace などテンプレートによって作られる、わかりきった部分のみです。
Zuishin

2020/04/11 04:59

理解できませんか? コンパイルという言葉を知りませんか?
Zuishin

2020/04/11 04:59

次々と新しいアカウントを作っては退会するのもやめてください。
Corona

2020/04/11 05:00

了解しました。 ちょっと、簡略なコードとして提示してみます。 ...ちょっとお待ちください。すみません。
guest

回答3

0

何かがおかしいせいとおもいますが、そのおかしい点をご指摘ください。

InputWindow inputWin = new InputWindow(); とした時点では TheStr プロパティには何も設定されてないので、inputWin.TheStr は null のままということだと思います。

試しに InputWindow クラスにコンストラクタを追加して、そこで TheStr プロパティに何らかの文字列を代入して試してみてはいかがですか?

投稿2020/04/11 05:06

退会済みユーザー

退会済みユーザー

総合スコア0

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

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

Corona

2020/04/11 05:08

はい。 恥ずかしくなってきましたが、試してみます。 みなさま、申し訳ありませんでした。
退会済みユーザー

退会済みユーザー

2020/04/11 05:16

皆さんの言っていることが理解できて、ちゃんと解決できたのですかね? そうは思えないのですが。 中途半端で投げ出してしまっては結局ここで聞いたこと、教えてもらったことは役に立たないのでは? また前回・今回と同じことを繰り返すのですか?
Corona

2020/04/11 09:04

はい、ただいま本を読み直していますが、コンストラクタとはどういうものか、コンストラクタはどこに記述するべきものかについて、調査中です。 理解にはもう少しかかりそうです。ごめんなさい。
Corona

2020/04/11 10:16

時間がかかってしまいましたが、分かってきました。 コンストラクタは、クラスメイト同じ名前で作成し、そこに引数を設定することで、プロパティに値を代入することができるのですね。 で、以下のようにやってみました。 public string TheStr { get; set; } に次いで、 public InputWindow(string s) { TheStr - s; } とするのですね。 これで、代入することが出来ました。 みなさま、ありがとうございます。 プロパティとコンストラクタとを対で使うということが分かりました。
guest

0

// ここで文字を入力して、その値をsText

// string sText = ( input text ) // に入れています。 // で、 TheStr = sText; // としました。

これをやってるコードが見当たらないので「やってない」のと同義です。

classというのは変数とメソッドの塊であり、そいつがnewされてからコンストラクタで初期化されるか、newされたオブジェクトに対して上記の操作が入っていないと、未初期化のためnullになります。

投稿2020/04/11 05:05

gentaro

総合スコア8947

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

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

0

ベストアンサー

string s = inputWin.ConnStr;

ConnStr とは?あなたの提示のコードには見当たりませんが


public string TheStr { get; set; }

こいつの初期化はどこで行ってるでしょうか。
コンストラクタで初期化しなければ、nullとなります

投稿2020/04/11 04:53

編集2020/04/11 04:56
y_waiwai

総合スコア88042

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

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

Corona

2020/04/11 04:55

すみません。文字を間違えてしまいました。 TheStrと書くべきところでしたので、本文をっ修正しました。 よろしくお願いします。
y_waiwai

2020/04/11 04:56

追記しました
Corona

2020/04/11 05:06

コンストラクタで、プロパティの初期化というのが必要なのですね? 参考書を読み直してみます。 ...すみません。もう一度このところを勉強し直してみます。
y_waiwai

2020/04/11 05:34

> InputWindow inputWin = new InputWindow(); ここで、インスタンスの生成を行ってますが、その時にコンストラクタも実行されます クラス変数は初期化しなければnull(ゼロ)となってます
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問