2012-03-10 8 views
0

を使用して設定していますどこに異なる方法で構造体からの情報を取得するので、基本的に私の問題は、私がどのように見えるの学生のための構造体にデータを設定し、私のプログラムのメソッドを持っているということです。それはC#

public static void addingstudent(){ 
     student student; 
     AddStudent details = new AddStudent(); 
     student.name = details.setName(); 
     student.course = details.setCourse(); 
     student.studentno = details.setStudentNumber(); 
     student.year = details.setYear(); 
     menu();   
    } 

AddStudentクラスは入力に名前などをユーザーに尋ねると、それらを返すためのいくつかのメソッドが含まれ、このクラスの例は次のようになります。

public static int setStudentNo(){ 
    Console.Write("Please enter Student Number: "); 
    int StudentNo = int.Parse(Console.ReadLine()); 
    return StudentNo; 
} 

そして、私はそのデータにアクセスし、それを表示しようとしています画面には:

ただ、すべての変数のnull値を表示している
public static void getstudent(){ 
     student student; 
     student.displayDetails(); 
    } 

は、しかし、私が最初にそれが正しく表示される値を設定した後、これを呼び出した場合、最後に構造体は次のようになります。

public struct student{ 

    public String name; 
    public int studentno; 
    public String course; 
    public int year; 

    public void displayDetails(){ 

     Console.WriteLine("Name: " + name); 
     Console.WriteLine("Student Number: "+studentno); 
     Console.WriteLine("Course: "+course); 
     Console.WriteLine("Year: "+year); 
    } 
+0

AddStudentクラスの目的と、これらのメソッドを呼び出すコンテキストについて説明できますか。エラーはそこにあるかもしれません。また、デバッガでコードをステップ実行し、割り当てが正しく機能していることを確認することもできます。 – ose

答えて

3

あなたのユーザーaddingstudent()student studentが、別のあなたは構造体と二つの機能を持つクラスを持つことができます

限り、私は...あなたが同じオブジェクトを使用していない見ることができるようにgetstudent()student student ...

データはあなたが本当にクラスを作成する必要が可変である場合
class A 
{ 
    studnet studnet; 
    public static void addingstudent() 
    {   
     AddStudent details = new AddStudent(); 
     student.name = details.setName(); 
     student.course = details.setCourse(); 
     student.studentno = details.setStudentNumber(); 
     student.year = details.setYear(); 
     menu(); 
    } 

    public static void getstudent() 
    {  
     student.displayDetails(); 
    } 
} 

は、それからちょうどしかし、あなたは

+0

それは私が私が両方のメソッドで同じオブジェクトを取得する方法を考えていると思ったのですが、それは今私の問題です – Coombes

+0

student.nameのような詳細を追加するために学生を使用させていないので、これはまだ私のために働いていません何らかの理由でメソッド内で構造体を呼び出さなくても、メソッド内では機能しません。 – Coombes

+0

クラスの代わりに構造体を使用する特別な理由はありますか?学生クラスを作成していくつかのプロパティとメソッドを追加するだけで、あなたが望むことを何でもできます –

0

が変更可能な構造体を作成する新しいクラスを作成し、データを操作することは、最初の場所で悪い考えです。

また、あなたは新しい生徒のオブジェクトを毎回作成しているgetstudent、例えば、パラメータとしてstuctを渡していない、これはあなたが学生のプロパティのいずれかを設定していないのでstudent.displayDetails();は、nullを見せている理由でありますあなたはそれを呼び出す前にその行に作成しました。

public static void getstudent() 
    { 
     Student student; // creates a new instance of the struct... 
     student.displayDetails(); // obviously student properties are null... 
    } 

本当に次のようなことを行う必要があります。

public class Student 
{ 
    public Student() 
    { 
     this.SetName(); 
     this.SetNumber(); 
     this.SetCourse() 
     this.SetYear(); 
    } 

    public override string ToString() 
    { 
     return string.Format(
        "Name: {0}{4}Number: {1}{4}Course: {2}{4}Year: {3}{4}", 
        this.Name, 
        this.Number, 
        this.Course, 
        this.Year, 
        Environment.NewLine); 
    } 

    public void DisplayDetails() 
    { 
     Console.WriteLine(this.ToString()); 
    } 

    public string Name { get; private set; } 
    public string Number{ get; private set; } 
    public string Course { get; private set; } 
    public string Year { get; private set; } 

    public static void SetName() 
    { 
     Console.WriteLine("Please enter Name: "); 
     this.Name = Console.ReadLine(); 
    } 

    public static void SetNumber() 
    { 
     Console.WriteLine("Please enter Number: "); 
     this.Number = int.Parse(Console.ReadLine()); 
    } 

    public static void SetCourse() 
    { 
     Console.WriteLine("Please enter Course: "); 
     this.Course = Console.ReadLine(); 
    } 

    public static void SetYear() 
    { 
     Console.WriteLine("Please enter Year: "); 
     this.Year = int.Parse(Console.ReadLine()); 
    } 
} 

public class App 
{ 
    public static void Main() 
    { 
     Student student1 = new Student(); // Create a student 
     student1.DisplayDetails(); // show the details 

     student1.SetName(); // change the name 
     student1.SetYear(); // change the year 
     student1.DisplayDetails(); // show the new details 

     // etc... 
    } 
}