从方法设置只读属性

时间:2013-05-14 16:31:52

标签: c# class methods

我有一个简单的问题,但我是一个新手。

我的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';
     }
}

3 个答案:

答案 0 :(得分:15)

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

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

其次,使用本地Mgrade是奇怪且不必要的,但有趣的是,实际上错误;在这样的一步中完成任务和返回是合法的。但在这种情况下你不需要;仅return 'A';没有本地作业。

第三,该方法名称不正确,因为未设置Grade属性。如果您打算设置等级,则返回无效:

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

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

public static char ScoreToGrade(float score)
{
   if(score >= 90.0)
   {
      return 'A';
   }
   return 'F';
} 
坦率地说,我倾向于两者兼顾:

public void SetGrade(float score)
{
  this.grade = ScoreToGrade(score);
} 

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

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

  public char Grade { get; private set; }

编译器会为您生成“隐形”后备字段,因此您无需自行管理。这种语法意味着可以从任何地方读取Grade并从该类中写入。{/ p>

答案 1 :(得分:6)

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

public char SetGrade(float score)
{
   if(score >= 90.0)
   {
      return 'A';
   }
   return 'F';
}

答案 2 :(得分:2)

你的语法有点不对:

  public char SetGrade(float score)
  {
     if(score >= 90.0)
     {
       return 'A';
     }
     return 'F';
  }

不需要Mgrade变量,您只需返回所需的字符,而不是返回作业。