从方法设置只读属性

Ric*_*ker 1 c# methods class

我有一个简单的问题,但我被困在一个新手.

我的SetGrade方法采用float参数,我希望它返回一个char,然后将该值设置为Grade属性.

我没有正确地做某事.

public Class Student {
    private char grade;

    public char Grade { get { return grade; } }

    public char SetGrade(float score) {
        char Mgrade;
        if(score >= 90.0) {
            return Mgrade = 'A';
        }
        return Mgrade = 'F';
     }
}
Run Code Online (Sandbox Code Playgroud)

Eri*_*ert 15

此代码存在许多问题,但它们可能不是您认为的那样.

首先,Public是错的; C#需要public.

其次,使用本地Mgrade是奇怪和不必要的,但有趣的是,实际上并没有 ; 在这样的一步中完成任务和返回是合法的.但在这种情况下你不需要; 只是return 'A';没有地方分配.

第三,该方法名称错误,因为它没有设置Grade属性.如果您打算设置等级,则返回无效:

public void SetGrade(float score)
{
   if(score >= 90.0)
   {
      this.grade = 'A';
   }
   this.grade = 'F';
} 
Run Code Online (Sandbox Code Playgroud)

相反,如果该方法是从浮点数到字符的转换,那么它应该是静态的:

public static char ScoreToGrade(float score)
{
   if(score >= 90.0)
   {
      return 'A';
   }
   return 'F';
} 
Run Code Online (Sandbox Code Playgroud)

坦率地说,我倾向于两者兼顾:

public void SetGrade(float score)
{
  this.grade = ScoreToGrade(score);
} 
Run Code Online (Sandbox Code Playgroud)

在那里,现在你已经拥有了两全其美的优势.

第四,这只是一个风格点; 你可能会考虑:

  public char Grade { get; private set; }
Run Code Online (Sandbox Code Playgroud)

编译器将为您生成"隐形"后备字段,因此您无需自行管理.这种语法意味着Grade可以从任何地方读取并从此类中写入.


Cla*_*edi 6

无需将角色分配给中间char变量.只需返回正确的字符.

public char SetGrade(float score)
{
   if(score >= 90.0)
   {
      return 'A';
   }
   return 'F';
}
Run Code Online (Sandbox Code Playgroud)