電子書籍の厳選無料作品が豊富!

C#のカテゴリが無く、その他(プログラミング)とどちらにしようか迷ったのですがこちらで質問します。

C#初心者です。今クラスについて勉強しているのですが、不思議に思うことがあるので質問します。
以下のコードは使っている教科書に載っているサンプルコードの一部です。
public class Student
{
//Data members, data fields, or characteristics
private int studentNumber;
private string studentName;
private int score1;
private int score2;
private int score3;
private string major;
//default constructor
public Student()
{
}
//constructor with one argument
public Student(int sID)
{
studentNumber = sID;
}
//constructor with two arguments
public Student(int sID, string name)
{
studentNumber = sID;
studentName = name;
}
//constructor with six arguments
public Student(int sID, string name,
int s1, int s2, int s3, string maj)
{
studentNumber = sID;
studentName = name;
score1 = s1;
score2 = s2;
score3 = s3;
major = maj;
}
(・・・その後もプロパティコードが続く)

Constructorにはクラス名と同じ名前を使うと解釈しているのですが、どうやって識別しているのでしょう?
例えば、Main()内で
Student thirdStudentObject = new Student(5432, "Randolph Wonder");

Student aStudentObject = new Student(1234, "Maria Smith", 97, 75, 87, "CS");
というコードがあるのですが、

Student thirdStudentObject = new Student(5432, "Randolph Wonder"); は

public Student(int sID, string name)
{
studentNumber = sID;
studentName = name;
}、

Student aStudentObject = new Student(1234, "Maria Smith", 97, 75, 87, "CS"); は

public Student(int sID, string name,
int s1, int s2, int s3, string maj)
{
studentNumber = sID;
studentName = name;
score1 = s1;
score2 = s2;
score3 = s3;
major = maj;
}

を呼び出しているのですよね?
上記の文では必要なアーギュメントが2個と6個なので数の違いからどのConstructorを使っているのかなんとなく分かりますが、もしも
public Student(int sID, string name)
{
studentNumber = sID;
studentName = name;
}

public Student(int sID, string SchoolName)
{
studentNumber = sID;
studentName = SchoolName;
}
などのように同じアーギュメント数もしくは同じデータタイプの場合、どうやって「どのConstructorを使うか」を識別させるのでしょうか?

同一クラス内に同じ数のアーギュメントを求めるものは作ってはいけなかったりするのでしょうか?

長い上に分かりづらい質問ですみません。

A 回答 (2件)

同一クラス内に同じ数のアーギュメントを求めるものは作ってはいけなかったりする


です.

厳密にいうと「並びが完全に一致する」ものはダメなので, 順序を変えて
public Student(int sID, string name)

public Student(string SchoolName, int sID)
なら OK なはずです.
    • good
    • 0
この回答へのお礼

有難うございました。もし良ければhttp://okwave.jp/qa/q7719800.htmlの質問もお願い致します。

お礼日時:2012/09/27 15:28

できません。


コンストラクタに限らず、オーバーロードは『仮引数の数もしくは型が違う』状態
でないと実装できません。
    • good
    • 0
この回答へのお礼

有難うございます。もし良ければhttp://okwave.jp/qa/q7719800.htmlもお願い致します。

お礼日時:2012/09/27 15:28

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!


おすすめ情報