C# 初始化对象后方法上的nullreference
我在C#方面相对较新,我只想在C#语言中使用 我有三个班,即学生、课程和年级。我只是不明白为什么它总是得到一个空值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; }
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属性的值?是的!问题已经回答了!非常感谢。