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

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

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

Re[2]: 異なるクラスのインスタンスを同じ配列で生成する方法


(過去ログ 129 を表示中)

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

■76648 / inTopicNo.1)  異なるクラスのインスタンスを同じ配列で生成する方法
  
□投稿者/ はれるん (1回)-(2015/07/29(Wed) 12:58:25)

分類:[C#] 

C#初心者です。
開発環境はVisual C# 2010 Expressです。

スーパークラスから継承されたクラスが複数あり、
それらのインスタンスを同じ配列で作ろうとしています。たとえばこんな感じ。

public class Student
{
...
}

public class ElementarySchoolStudent : Student
{
...
}

public class HighSchoolStudent : Student
{
...
}


/* 配列の宣言 */
○○○[] student = new ○○○[100];

/* コンストラクタ呼び出し */
ElementarySchoolStudent student[0] = new ElementarySchoolStudent("Taro"):
ElementarySchoolStudent student[1] = new ElementarySchoolStudent("Hanako"):
HighSchoolStudent student[2] = new HighSchoolStudent("Ichiro"):
...
HighSchoolStudent student[99] = new HighSchoolStudent("Jiro"):

↑実際は、名前とElementarySchoolStudent, HighSchoolStudentの別が書かれたファイルを読んで、
順番に生成していきます。

こうしておいて、student[i].TellMePiとかすると、ElementarySchoolStudentは3と返し、HighSchoolStudentは3.14
を返すみたいなプログラムを作りたいのです。

このような事は可能でしょうか? また、どう書けば良いでしょうか?

あと、配列studentをサブルーチンに渡す際、どう書けば良いのでしょうか?
サブルーチンを定義する方で、
サブルーチン名(○○○[] student){}
と書きますが、○○○はどう書けば良いのでしょうか?

すみませんが、よろしくお願いします。


引用返信 編集キー/
■76650 / inTopicNo.2)  Re[1]: 異なるクラスのインスタンスを同じ配列で生成する方法
□投稿者/ 774RR (287回)-(2015/07/29(Wed) 13:18:00)
継承・派生ができるのなら abstract や virtual を使えばいいんぢゃないかな。

Student に TellMePi() の実装が不要・あってはならないなら abstract にして
public abstract class Student
{
    public abstract double TellMePi();
}
public class ElementaryStudent : Student
{
    public override double double TellMePi() { return 3.0; }
}
public class HighStudent : Student
{
    public override double double TellMePi() { return 3.14; }
}

Student に TellMePi() の実装が必要なら virtual (課題:自分で実装してみよう)

参照型の派生クラスオブジェクトを new して基底クラス配列に格納するのは普通の話なので
派生ができる人がなぜこんなことに悩んでいるのかよくわからない。

Student[] students = new Student [2];
students[0] = new ElementaryStudent();
students[1] = new HighStudent();
DoSomething(students);

void DoSomething(Student[] students)
{
}

引用返信 編集キー/
■76653 / inTopicNo.3)  Re[1]: 異なるクラスのインスタンスを同じ配列で生成する方法
□投稿者/ WebSurfer (634回)-(2015/07/29(Wed) 14:12:46)
No76648 (はれるん さん) に返信

「継承」のところまでは学んだが、まだ「多態性(ポリモーフィズム)」のところ
まで進んでないということでしょうか?

であれば、そこまで勉強を進めることをお勧めします。そこまで進めれば、たぶん
ご自分で答えは出せると思います。

「c#」「継承」「多態性」などをキーワードに検索すると参考になる記事が多々ヒ
ットすると思います。例えば下記:

第2回 ポリモーフィズム
http://csjhs.ssair.tk/net/chukyu/2old.html

C# によるプログラミング入門[オブジェクト指向]多態性
http://ufcpp.net/study/csharp/oo_polymorphism.html


あと、コレクションについても学ぶことをお勧めします。

コレクション (C# および Visual Basic)
https://msdn.microsoft.com/ja-jp/library/ybcx56wz(v=vs.120).aspx
引用返信 編集キー/
■76657 / inTopicNo.4)  Re[2]: 異なるクラスのインスタンスを同じ配列で生成する方法
□投稿者/ はれるん (2回)-(2015/07/29(Wed) 23:37:37)
774RR さん、WebSurfer さん

はれるん です。

ご回答ありがとうございます。助かりました。

私は別言語で、オブジェクト指向プログラミングの経験がちょっとあるだけなのです。

C#は初心者で、それにもかかわらず大き目のプログラムを作成しなければならなくなり、
苦しんでいたところでした。

基礎的な事項が欠けているようなので、
きちんと勉強するようにします。

どうもありがとうございました。

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


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

このトピックに書きこむ

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

管理者用

- Child Tree -