C# 初始化对象后方法上的nullreference

C# 初始化对象后方法上的nullreference,c#,C#,我在C#方面相对较新,我只想在C#语言中使用 我有三个班,即学生、课程和年级。我只是不明白为什么它总是得到一个空值 class Student { Name name; Course course; public Student(Course course) { this.course = course; } public Course C { get { return course; }

我在C#方面相对较新,我只想在C#语言中使用

我有三个班,即学生、课程和年级。我只是不明白为什么它总是得到一个空值

class Student
{
    Name name;
    Course course;

    public Student(Course course)
    {
        this.course = course;
    }

    public Course C
    {
        get { return course; }
        set { course = value; }
    }

}

class Course
{
    string name;
    string code;
    int units;
    Grade grade; // this one warns as 'Course.grade' is never assigned to, and will always have its default value null

    public Course(string name, string code)
    {
        this.name = name;
        this.code = code;
    }

    public void DisplayDetails()
    {
        Console.WriteLine("Course: {0}({1})", code, name);
    }

    public int U
    {
        get { return units; }
        set { units = value; }
    }

    public Grade G
    {
        get { return grade; }
        set { value = grade; }
    }
}

class Grade
{
    double q;
    double o;
    double fe;
    double fg;

    public Grade(double q, double o, double fe)
    {
        this.q = q;
        this.o = o;
        this.fe = fe;
    }

    public void ComputeGrade()
    {
        fg = q * .5 + o * .2 + fe * .3;
    }

    public double C
    {
        get { return fg; }
        set { value = fg; }
    }

}
这是我的主课

class Program
{
    static void Main(string[] args)
    {
        Student s = new Student(new Course("Something", "1234"));
        s.C.U = 3;
        s.N = new Name("John", "Snow");
        Grade grade = new Grade(90.0, 90.0, 90.0); // I have initialized an object here


        s.C.G.ComputeGrade(); //but this gets a null value

        s.N.Display2();
        s.C.DisplayDetails();
        Console.WriteLine(" - {0} units", s.C.U);
        Console.WriteLine(" Grade: {0}", s.C.G.C); //as well as this
        Console.ReadKey();

    }
}

我相信我已经为等级类的对象设置了值。我还声明它是getter/setter。我的代码有问题还是缺少代码?

正确
G
setter in
课程
课堂:

public Grade G
{
    get { return grade; }
    set { grade = value; }
}
并在使用前设置G值,如Fabio建议的:

s.C.G = new Grade(90.0, 90.0, 90.0);

纠正
G
课程中的设置者class:

public Grade G
{
    get { return grade; }
    set { grade = value; }
}
并在使用前设置G值,如Fabio建议的:

s.C.G = new Grade(90.0, 90.0, 90.0);

使用前设置G:
s.C.G=新等级(90.0,90.0,90.0),然后您可以使用它
s.C.G.ComputeGrade()
@Fabio正如CodeFuller的回答正确指出的那样,这不会有任何效果,因为
G
的属性设置器实际上没有任何作用。实际上Fabio也是对的,拥有正确的设置器是工作的一半。但是在代码中从未调用setter。这很公平,从我的评论中删除了“否”。谢谢!我的问题已经回答了@使用前的FabioSet G:
s.C.G=新等级(90.0,90.0,90.0),然后您可以使用它
s.C.G.ComputeGrade()
@Fabio正如CodeFuller的回答正确指出的那样,这不会有任何效果,因为
G
的属性设置器实际上没有任何作用。实际上Fabio也是对的,拥有正确的设置器是工作的一半。但是在代码中从未调用setter。这很公平,从我的评论中删除了“否”。谢谢!我的问题已经回答了@法比奥谢谢你!我没有注意到,它删除了警告,但我仍然在ComputeGrade()方法上得到NullReferenceException。您是否按照Fabio的建议设置了G属性的值?是的!问题已经回答了!非常感谢。非常感谢。我没有注意到,它删除了警告,但我仍然在ComputeGrade()方法上得到NullReferenceException。您是否按照Fabio的建议设置了G属性的值?是的!问题已经回答了!非常感谢。