初始化对象后的方法nullreference
我在C#中相对较新,我只是想在语言中使用它。初始化对象后的方法nullreference
我有三个班,即学生,课程和成绩。我似乎无法理解为什么它始终得到一个空值。
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();
}
}
我相信已经设置了Grade对象的值。我也宣布它是getter/setter。我是在做错代码还是缺少代码?
正确G
设定器在Course
类:
public Grade G
{
get { return grade; }
set { grade = value; }
}
和使用等的Fabio之前设置G值表明:
s.C.G = new Grade(90.0, 90.0, 90.0);
谢谢!我没有注意到,它删除了警告,但我仍然在方法ComputeGrade()上得到NullReferenceException。 – programmingisfun
您是否按照Fabio的建议来设定G财产的价值? – CodeFuller
是的!问题已经回答!谢谢! – programmingisfun
配套G使用前:'SCG =新级(90.0,90.0,90.0 );',那么你可以使用它'sCGComputeGrade();' – Fabio
@Fabio CodeFuller的回答正确地指出,这没有任何影响,因为'G'的属性设定器实际上什么都不做。 – hvd
其实法比奥也是对的,有正确的二传手是一半的工作。但是setter从来不会在代码中调用。 – CodeFuller