- 題名: クラスの中の共通の型の宣言の仕方
- 日時: 2010/01/04 4:43:19
- ID: 26172
- この記事の返信元:
- (なし)
- この記事への返信:
- [26173] Re[1]: クラスの中の共通の型の宣言の仕方2010/01/04 6:10:25
- ツリーを表示
■No26172に返信(たなかさんの記事)
> クラス clsTest1とクラス clsTest1_5の中でclsTest2を使いたいと思っています。
> そのクラスのthisをclsTest2の中の引数で渡す時に型の設定をしないといけないと
> 思いますが
> clsTest1とclsTest1_5の両方の名前を宣言しないといけないのでしょうか?
> clsTest1とclsTest1_5の共通で使える型や宣言はありませんか?
>
> よろしくお願いします。
>
> C# NET Framework3.5
>
> using System;
> using System.Collections.Generic;
> using System.Linq;
> using System.Text;
>
> class clsTest1 {
>
> clsTest2 clsTest2;
>
> public clsTest1() {
> // clsTest2 = new clsTest2(this);
> }
>
> }
>
> using System;
> using System.Collections.Generic;
> using System.Linq;
> using System.Text;
>
> class clsTest1_5 {
>
> clsTest2 clsTest2;
>
> public clsTest1_5() {
> clsTest2 = new clsTest2(this);
> }
>
> }
>
> using System;
> using System.Collections.Generic;
> using System.Linq;
> using System.Text;
>
> class clsTest2 {
>
> clsTest1_5 tes;
>
> public clsTest2(clsTest1_5 a) {
> tes = a;
> }
>
> }
>
文章がわかりにくいですが、整理すると
1. clsTest1 と clsTest1_5 の両方で clsTest2 を使用している。
2. clsTest1 と clsTest1_5 のコンストラクタでは clsTest2 のコンストラクタにそれぞれ自分自身のクラスを渡している。
3. clsTest2 に clsTest1 と clsTest1_5 を引数として取るコンストラクタを書かなくてはいけないのか?
共通で使える宣言などはないのか?
ということでしょうか。
現在のコードでは clsTest1 と clsTest1_5 はそれぞれ独立したクラスなので、両方の引数をとるコンストラクタを
用意しなくてはいけないと思います。
共通性を持たせるならば clsTest1 と clsTest1_5 の上位にインターフェースなどを用意して、clsTest2 ではその
インターフェースクラスを宣言するという方法もあるかと思います。
たとえばこんな感じ。
class clsTest0 {
}
class clsTest1 : clsTest0 {
clsTest2 clsTest2;
public clsTest1() {
clsTest2 = new clsTest2(this);
}
}
class clsTest1_5 : clsTest0 {
clsTest2 clsTest2;
public clsTest1_5() {
clsTest2 = new clsTest2(this);
}
}
class clsTest2 {
clsTest0 tes;
public clsTest2(clsTest0 a) {
tes = a;
}
}
ただ、目的がよくわからないので、自分としては clsTest1 と clsTest1_5 を引数に持つコンストラクタ
を両方持つ方が良いと思います。
分類:[.NET]
クラス clsTest1とクラス clsTest1_5の中でclsTest2を使いたいと思っています。
そのクラスのthisをclsTest2の中の引数で渡す時に型の設定をしないといけないと
思いますが
clsTest1とclsTest1_5の両方の名前を宣言しないといけないのでしょうか?
clsTest1とclsTest1_5の共通で使える型や宣言はありませんか?
よろしくお願いします。
C# NET Framework3.5
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
class clsTest1 {
clsTest2 clsTest2;
public clsTest1() {
// clsTest2 = new clsTest2(this);
}
}
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
class clsTest1_5 {
clsTest2 clsTest2;
public clsTest1_5() {
clsTest2 = new clsTest2(this);
}
}
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
class clsTest2 {
clsTest1_5 tes;
public clsTest2(clsTest1_5 a) {
tes = a;
}
}