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

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

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

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

Q&A

解決済

2回答

2775閲覧

別クラスから、boolの配列?を確認したい

Kuronekoya

総合スコア26

C#

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

0グッド

1クリップ

投稿2016/04/15 01:55

いつもお世話になっております。今回もどうぞご教授くださいませ。

まだまだ初心者で、拙い文で見づらいかと思いますがよろしくお願いいたします。
C#を使っております。
class AにmTestという配列を作っているのですが、class Bからその配列を見て使いたいのです。

public class A:
public bool[,] mTest = new bool [x, y]

以下のように、mTest[x, y]がtrueの時は…というように使いたいのです。

public class B:
if(mTest[x, y] == true)
{
処理
}

色々調べてみるとrefやoutを使うと出てきたのですが、合っているのかも、実際の使い方がよくわからず…。
何卒よろしくお願いいたします。

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

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

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

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

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

guest

回答2

0

ベストアンサー

こんにちは。

そのmTestがクラスA自体に属するのか、クラスAのインスタンスに属するのかについての検討がまず必要です。

前者の場合は、クラスAの全てのインスタンスで同じmTestが共有されます。

C#

1A a0 = new A(); 2A a1 = new A();

とした時、a0.mTest[0,0]やa1.mTest[0,0]の形式ではアクセスできません。
A.mTest[0,0]でアクセスしますので、a0, a1のそれぞれに別の値を設定することができません。

そして、このケースではプリフィクスとしてmを使うことは危険かもしれません。mはmemberのmでインスタンスに属する変数を意味することが多いからです。

後者の場合は、クラスAのインスタンス毎にmTestが生成されます。

C#

1A a0 = new A(); 2A a1 = new A();

とした時、a0.mTest[0,0]とa1.mTest[0,0]が異なる値を保持できます。

解決方法ですが、前者の場合は既にkunimatsuさんが回答されている通りです。

後者の場合は、クラスBでアクセスしたいクラスAのインスタンスをクラスBへ渡します。
方法は色々あり、クラスB側もクラスBのstatic関数でアクセスしたいのか、クラスBのインスタンス関数でアクセスしたいのかで、また異なります。
ですので、クラスBについても同様にクラスB自体がアクセスしたいのか、クラスBのインスタンスがアクセスしたいのか、定めて下さい。

投稿2016/04/15 02:32

編集2016/04/15 03:30
Chironian

総合スコア23272

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

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

ozwk

2016/04/15 03:05

> 前者の場合は、クラスAの全てのインスタンスで同じmTestが共有されます。 C#だとstaticメンバはインスタンス経由でアクセスできないのでは
Chironian

2016/04/15 03:28

ああ、確かにそうでした。 安易にコピペしてました。ご指摘ありがとう。修正します。
Kuronekoya

2016/04/16 08:40

Chironian様、前回に引き続きわかりやすい説明をありがとうございます。 staticでも渡せなかったため、とても悩んでおりました。 ozwk様も適切なアドバイスをありがとうございます。 お二人のアドバイスを元に、なんとか解決いたしました。 まだまだオブジェクト指向が身についていないようで、色々苦戦しておりますが、なんとか頑張ります。お二人ともありがとうございました!
guest

0

オブジェクトは理解されてますか?

全体像が分からないので何とも言えませんが、
public static bool[,] mTest = new bool [x, y];

public class B:
if(A.mTest[x, y] == true)
{
処理
}
というのが一番変更が少ないかと思います。

投稿2016/04/15 02:03

編集2016/04/15 02:04
kuniatsu

総合スコア141

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

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

Kuronekoya

2016/04/16 08:43

kuniatsu様、アドバイスをありがとうございます。 オブジェクト指向がまだきっちり身についておらず、かなり苦戦しております… 全体像を書かずに質問してしまい申し訳有りません。その少ない情報の中でも助言を頂けて本当に助かっております。 なんとか今回解決いたしました。また質問した際はよろしくお願いいたします!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問