עבור לתוכן

שאלה לגבי struct ומטודה שלה

Featured Replies

פורסם

אהלן

יצרתי לי struct פשוט:


public struct Student
{
public int studentID;
public string studentName;
public decimal averageGrade;

public Student StudentObject()
{
Student name;
Console.WriteLine("Please enter student ID");
int a = Int32.Parse(Console.ReadLine());
Console.WriteLine("Please enter student name");
string b = Console.ReadLine();
Console.WriteLine("Please enter student avarage grade");
decimal c = decimal.Parse(Console.ReadLine());
name.studentID = a;
name.studentName = b;
name.averageGrade = c;

return name;



}

אך משום מה אני לא מצליח להיכנס למטודה שלו


static void Main(string[] args)
{

Student stud = stud.StudentObject();

}

נראה לי שזאת טעות מטומטמת שלי אבל אני לא מצליח להבין מה (הקומפיילר צועק לי use of unassigned local variable אבל הגדרתי אותו..)

פורסם

Student stud = new Student;

פורסם

dekgol, הבעיה שלך היא שלא יצרת עדיין מופע של Student.

כדי ליצור מופע עליך לפנות אל המתודה הבונה שלך, ע"י השורה:

Student stud = new Student();

ורק אח"כ לבקש את המתודה StudentObject, כדי להכניס ערכים למופע.

בכלל, גישה שכזו לא מומלצת, כיוון שאתה מאתחל Student ריק, ואז מכניס לתוכו ערכים.

ועוד הערה לסיום- אתה יכול לקבל יש ערכים לתוך השדות (this.studentID לדוגמא) של המחלקה (במקרה הזה struct). אתה לא חייב לקלוט אותם למשתנה זמני (a) לפני-כן.

הערה:

אפשרות נוספת היא להגדיר את הפונקציה שלך כסטאטית (static), ואז תוכל לפנות אליה מתוך המחלקה (Student.StudentObject) ולא רק מתוך מופע קיים.

פורסם

בנוסף לכל מה שפירסמו למעלה, שים לב שהמתודה שלך פועלת באופן בעייתי.

אתה משלב את הקלט\פלט בתוך המחלקה עצמה

מה אם פתאום תרצה לשדרג את הUI שלך מקונסולה לForm? אם תרצה לתמוך בכמה שפות במקביל? אתה בבעייה.

הדרך הנכונה לבנות Ctor היא לקבל דרך פרמטרים את כל המידע שאתה צריך.

למשל:


public struct Student
{
public Student(string Name,int ID,double AvrgGrade)
{
...
}
}

פורסם

דרך אגב, למה בכלל אתה משתמש ב-struct ולא ב-class? לא ממש נהוג להשתמש ב-struct.

פורסם

דרך אגב, למה בכלל אתה משתמש ב-struct ולא ב-class? לא ממש נהוג להשתמש ב-struct.

אני גם ממליץ להוסיף C# לנושא. הייתי ממש מבולבל במשך שתי דקות.

ארכיון

דיון זה הועבר לארכיון ולא ניתן להוסיף בו תגובות חדשות.

דיונים חדשים