using System;
namespace studentObj
{
class Student
{
private int id ();
private string name ();
private char grade ();
public int ID
{
get {return id;}
}
public string Name
{
get {return name;}
set {name = value;}
}
public char Grade
{
get {return grade;}
}
public Student(int ID, string Name)
{
int id;
string name;
}
public SetGrade(float score)
{
if (score>=90.0f)
grade="A";
else if (score>=80.0f)
grade="B";
else if (score>=70.0f)
grade="C";
else if (score>=60.0f)
grade="D";
else
grade='F';
return grade;
}
public override string ToString(){
}
class Kid
{
private int id { get; }
private string name { get; set;}
private char grade { get; }
public override string ToString ()
{
return id + "," + name + "," + grade;
}
}
}
class MainClass
{
public static void Main (string[] args)
{
Student student = new Student (Name = "Jasdeep", ID = "234");
SetGrade.student=75.0f;
Console.WriteLine (student);
}
}
}
它说的错误是来自SetGrade块,它说我需要添加一个返回类型,但我很困惑它应该是什么。它应该是成绩或分数还是别的什么。
答案 0 :(得分:3)
它需要返回类型,即使该类型为void
。此方法声明没有这样的类型:
public SetGrade(float score)
然而, 确实会尝试返回一些内容:
return grade;
某些内容似乎是char
,因此请将其设为返回类型:
public char SetGrade(float score)
虽然从语义上来说,似乎应该返回任何东西。该方法将自己称为setter,并且实际上应该是一个普通的属性setter,因为它不是因为它需要一个参数。所以只需设置值不返回:
public void SetGrade(float score)
{
if (score>=90.0f)
grade='A';
else if (score>=80.0f)
grade='B';
else if (score>=70.0f)
grade='C';
else if (score>=60.0f)
grade='D';
else
grade='F';
}
(另请注意,我将"A"
之类的字符串替换为'A'
之类的字符。在C#中,您使用单引号生成char
字面值,这与{string
字面值非常不同{1}}字面意思。)
现在,这里还有其他问题。我之前从未见过这种语法:
private int id ();
private string name ();
private char grade ();
如果那些只是变量那么你就不想要括号:
private int id;
private string name;
private char grade;
此外,您的构造函数实际上并没有对您传递的值执行任何操作,它只是在其范围内声明变量而从不设置它们:
public Student(int ID, string Name)
{
int id;
string name;
}
你可能
想要做的事情就是设置班级'私有变量:public Student(int ID, string Name)
{
id = ID;
name = Name;
}
虽然老实说,您可以使用自动生成的属性来简化属性。然后,该课程的大部分内容将如下所示:
class Student
{
public int ID { get; private set; }
public string Name { get; set; }
public char Grade { get; private set; }
public Student(int id, string name)
{
ID = id;
Name = name;
}
public void SetGrade(float score)
{
if (score>=90.0f)
Grade='A';
else if (score>=80.0f)
Grade ='B';
else if (score>=70.0f)
Grade ='C';
else if (score>=60.0f)
Grade ='D';
else
Grade ='F';
}
}
这更符合C#命名约定,减少了大量代码,并且真正清除了类的整体外观。从结构上和语义上来说,还有更多的修复和改进,但我会将其作为练习。