タイトル一覧   関連タグ: Win C#
タグ:Win C# タイトル:内部クラスから外側クラス内フィールドを参照する
1
1:  お名前:doronjo 2004/12/08 23:24:01

class testA
{
  private string str;

  class testB
  {
  Method()
  {
  //ここからstrを参照できないでしょうか?
  }
  }
}

あちこち調べていると、内部クラスは外側のクラスのフィールドを参照することができるような記述があるのですが(勘違いで無ければ)、参照方法がわかりません。
よろしくお願い致します。
2:  お名前:みゃみゅ玉子 2004/12/09 0:36:55

みゃみゅ玉子です。
クラスの中のクラス・・・僕も悩んだときありました。
参照できてもいいじゃん!と。
# Javaだとサブクラスから参照できるんでしたっけ?

C#だと、doronjoさんの例の場合、「testA」っていうnamespaceの扱いになると思います。
なので、testAとtestA.testBというクラスができる感じです。
なので、privateだと参照できません。

# なんか回答がいいかげんかもしれません。
# ご指摘、追記をお願いします。>皆様

3:  お名前:渋木宏明(ひどり) 2004/12/09 7:09:40

private じゃ無理。

public なら、

class testA
{
  public string str;
  testB B;

  testA()
  {
  this.B = new testB (this);
  }

  class testB
  {
  testA Owner;

  testB(testA owner)
  {
  this.Owner = owner;
  }

  void Method()
  {
  string s = this.Owner.str;
  }
  }
}

とでもすれば参照できます。

4:  お名前:なちゃ 2004/12/09 10:16:54

あれ、privateでもいけませんでしたっけ?

5:  お名前:なちゃ 2004/12/09 10:26:01

あ、ちなみに、C#での内部クラスは、Javaでいうstaticのついた内部クラスです。
なので、外側のクラスと内側のクラスの(インスタンスの)間に、暗黙の参照は存在しません(自動的にインスタンスが関係付けられたりはしません)。

インスタンス同士には暗黙の関係はできないので、外側のprivate変数にアクセスするというのとは、ちょっとイメージが変わります。
例えば、内側のクラスのメソッド等で、外側のクラスのインスタンスを作成してそのメンバにアクセスすることなどができるということになります。
# staticなメンバならそのまま見えますが。

6:  お名前:菊池 2004/12/09 11:11:16

privateでもOKなはず…

  class Program
  {
  private string privString;

  class X
  {
  Program theApp;

  public X(Program theApp) { this.theApp = theApp; }
 
  public string Test
  {
  get { return theApp.privString; }
  }
  }

  public static void Main(string[] args)
  {
  Program p = new Program();
  X x = new X(p);
  p.privString = "AAA";
  System.Diagnostics.Debug.Assert(p.privString == x.Test);
  }
  }


7:  お名前:渋木宏明(ひどり) 2004/12/09 12:05:57

>あれ、privateでもいけませんでしたっけ?

>privateでもOKなはず…

あれ? そうでしたっけ?
うそついてしまった。。。
ごめんなさい。

8:  お名前:doronjo 2004/12/09 17:17:46

>外側のクラスと内側のクラスの(インスタンスの)間に、暗黙の参照は存在しません(自動的にインスタンスが関係付けられたりはしません)。

それを期待していたのですが…。
内部クラスといっても、スコープを除くと一般的なクラスと同等なのですね。

それにしても、C#楽しいですね。
オブジェクト指向を活かしたパーツがうまく組みあがった時は、独り幸せな気分に浸っております。
皆様に見せたら笑われてしまうかもしれませんが。

ご回答頂いた皆様、有難うございました。
9:  お名前:そなた 2004/12/15 13:48:17

このスレッド,かなり参考になりました^^;
皆様ありがとうございます.

>オブジェクト指向を活かしたパーツがうまく組みあがった時は、独り幸せな気分に浸っております。
>皆様に見せたら笑われてしまうかもしれませんが。

同感です^^;
10:  お名前:ノヴァ 2011/10/13 6:43:28

privateは外側からの参照をできなくする、
publicは参照できるようにする、そんな意味です。
1
お名前
メッセージ
次回のために入力情報を記録