C# と VB.NET の質問掲示板

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト

インスタンスの作成方法


(過去ログ 4 を表示中)

[トピック内 9 記事 (1 - 9 表示)]  << 0 >>

■4455 / inTopicNo.1)  インスタンスの作成方法
  
□投稿者/ GOD 二等兵(5回)-(2006/06/21(Wed) 17:48:48)

分類:[C#] 


分類:[C#] 

インスタンスの作成方法について教えてください。
下記のような感じでインスタンスを作成しているのですが、どうにかTest関数に渡す引き数を一つ(typeof(A[])だけ)に出来ないものでしょうか。

private void btnRead1_Click(object sender, EventArgs e)
{
A[] a;
a = (A[])Test(typeof(A[]), typeof(A));
}
private Object Test(Type objType1, Type objType2)
{
Object[] obj;
obj = (Object[])Activator.CreateInstance(objType1, 1);
obj[0] = Activator.CreateInstance(objType2);
return obj;
}


0
引用返信 編集キー/
■4457 / inTopicNo.2)  Re[1]: インスタンスの作成方法
□投稿者/ Hongliang 伍長(57回)-(2006/06/21(Wed) 18:07:24)
Hongliang さんの Web サイト

分類:[C#] 

Array.CreateInstance とか使ったらいいんじゃないですか?

0
引用返信 編集キー/
■4474 / inTopicNo.3)  Re[2]: インスタンスの作成方法
□投稿者/ GOD 二等兵(6回)-(2006/06/22(Thu) 09:26:31)

分類:[C#] 

> Array.CreateInstance とか使ったらいいんじゃないですか?
>
回答ありがとうございます。

Array.CreateInstance を使用してみましたが、使い方が良く分かりませんでした。
>> obj = (Object[])Activator.CreateInstance(objType1, 1);
の変わりに
obj = (Object[])Array.CreateInstance(objType1, 1);
と記載できたのですが、
>> obj[0] = Activator.CreateInstance(objType2);
の変わりはどのように記載すれば良いのでしょうか。
Array.CreateInstanceは次元の指定しか出来ないように見えますが、中身のインスタンスを設定することができるのでしょうか。

先にも書きました通り、引き数が typeof(A[]) だけになり
obj[0] = Activator.CreateInstance(objType1);
と記載してしまうとエラーが出てしまいます。

0
引用返信 編集キー/
■4475 / inTopicNo.4)  Re[3]: インスタンスの作成方法
□投稿者/ Hongliang 伍長(58回)-(2006/06/22(Thu) 10:18:25)
Hongliang さんの Web サイト

分類:[C#] 

http://msdn2.microsoft.com/ja-jp/library/zb3cfh7k.aspx
サンプルをご覧ください。

0
引用返信 編集キー/
■4480 / inTopicNo.5)  Re[4]: インスタンスの作成方法
□投稿者/ GOD 二等兵(7回)-(2006/06/22(Thu) 11:56:53)

分類:[C#] 

> http://msdn2.microsoft.com/ja-jp/library/zb3cfh7k.aspx
>サンプルをご覧ください。
>
返信ありがとうございます。
サンプルを見たのですが、これをどのように私のプログラムに活用すれば良いのか分かりませんでした。
サンプルでは SetValue で各次元に値を設定しているようでしたが、設定する値をobjType1 が保有しているクラスのインスタント値にする為には SetValue の第一引き数をどのように変更すればよいのでしょうか。

0
引用返信 編集キー/
■4481 / inTopicNo.6)  Re[5]: インスタンスの作成方法
□投稿者/ Hongliang 伍長(59回)-(2006/06/22(Thu) 12:38:23)
Hongliang さんの Web サイト

分類:[C#] 

Array.CreateInstance(Type, Int32) の第二引数で指定するのは次元数ではなく要素数です。この引数を持ったオーバーロードを使用する場合、次元数は 1 で固定です(とリファレンスにも書いてありますよね?)。
各要素を設定したいなら、そりゃそれぞれのインスタンスを作成する必要があるでしょう。各インスタンスの作成は一番初めの投稿でなさってますよね?

また、Array.CreateInstance のサンプルをもう一度よくご覧ください。
このサンプルでは Int32 の配列を作成していますが、このとき elementType パラメータ(第一引数)にはどんなものを指定しているでしょうか?

0
引用返信 編集キー/
■4485 / inTopicNo.7)  Re[6]: インスタンスの作成方法
□投稿者/ GOD 二等兵(8回)-(2006/06/22(Thu) 13:43:28)

分類:[C#] 

> Array.CreateInstance(Type, Int32) の第二引数で指定するのは次元数ではなく要素数です。この引数を持ったオーバーロードを使用する場合、次元数は 1 で固定です(とリファレンスにも書いてありますよね?)。
>
失礼しました。
次元数ではなく要素数でした。(用語の使用が間違ってました。)

> 各要素を設定したいなら、そりゃそれぞれのインスタンスを作成する必要があるでしょう。各インスタンスの作成は一番初めの投稿でなさってますよね?
>
引き数を2つ使用して最初に投稿したようにすればインスタンスの設定もできるのですが、引き数を一つ(typeof(A[]))にした時のインスタンスの設定方法がわかりません。
単純に
obj[0] = Activator.CreateInstance(objType1);
と記述するとエラーが出てしまうわけです。
(エラー:このプロジェクトで引き数なしコンストラクタは定義されていません。)
因みに要素数の指定は Array を使用しなくても
obj = (Object[])Activator.CreateInstance(objType1, 1);
で可能なのですが。

> このサンプルでは Int32 の配列を作成していますが、このとき elementType パラメータ(第一引数)にはどんなものを指定しているでしょうか?
>
サンプルはInt32の配列なので数字を設定してますよね。
これを私のプログラムで活用する時にはどうするのでしょう。
objType1が保有しているクラスのインスタンスの設定方法がわかりません。

private void button1_Click(object sender, EventArgs e)
{
A[] a;
a = (A[])Test(typeof(A[]));
}
private Object Test(Type objType)
{
Object[] obj;
obj = (Object[])Activator.CreateInstance(objType, 1);
// ここで各要素にインスタンスを作成
// obj[0] = Activator.CreateInstance(?????);
return obj;
}

または

private Object Test(Type objType)
{
Object[] obj;
obj = (Object[])Activator.CreateInstance(objType, 1);
Array myArray = obj;
for (int i = myArray.GetLowerBound(0); i <= myArray.GetUpperBound(0); i++)
{
// ここで各要素にインスタンスを作成
//myArray.SetValue(?????, i);
}
return obj;
}


0
引用返信 編集キー/
■4486 / inTopicNo.8)  Re[1]: インスタンスの作成方法
□投稿者/ 魔界の仮面弁士 准尉(109回)-(2006/06/22(Thu) 14:52:09)

分類:[C#] 

やりたい事が良く分からないのですが、目標としているのが
> a = (A[])Test(typeof(A[]), typeof(A));
に関して、typeof(A[]) から typeof(A) を得たい…という事なのであれば、
このように書くことができるかも。

private object Test(Type type)
{
if (type.IsArray)
{
Type t = type.GetElementType();



0
引用返信 編集キー/
■4493 / inTopicNo.9)  Re[2]: インスタンスの作成方法
□投稿者/ GOD 二等兵(9回)-(2006/06/22(Thu) 16:14:19)

分類:[C#] 

>やりたい事が良く分からないのですが、目標としているのが
>> a = (A[])Test(typeof(A[]), typeof(A));
>に関して、typeof(A[]) から typeof(A) を得たい…という事なのであれば、
>このように書くことができるかも。
>
回答ありがとうございます。
type.GetElementType() で目的のことが出来ました。
obj[0] = Activator.CreateInstance(objType.GetElementType());


解決済み
引用返信 編集キー/


トピック内ページ移動 / << 0 >>

このトピックに書きこむ

過去ログには書き込み不可

管理者用

- Child Tree -