C# 挣扎于方法和类如何交互
我刚开始学习C#,正在尝试实现下面的代码,但是我无法实现,因为收到错误“名称空间不能直接包含字段或方法等成员” 我试图实现的是创建一个名为“RoundResult”的方法,该方法将对“AverageGrade”结果进行四舍五入。我这样做仅仅是为了尝试和理解方法之间是如何相互作用的 我在学习C#时面临的最大障碍是方法和类,如何正确使用它们,何时将它们放在现有类中或创建自己的单独类等。如果有人有任何推荐的资源,可以逐步详细介绍如何实现方法和类,我们将不胜感激 编辑:感谢Farmer和wazdev的回答。我想补充一个问题C# 挣扎于方法和类如何交互,c#,C#,我刚开始学习C#,正在尝试实现下面的代码,但是我无法实现,因为收到错误“名称空间不能直接包含字段或方法等成员” 我试图实现的是创建一个名为“RoundResult”的方法,该方法将对“AverageGrade”结果进行四舍五入。我这样做仅仅是为了尝试和理解方法之间是如何相互作用的 我在学习C#时面临的最大障碍是方法和类,如何正确使用它们,何时将它们放在现有类中或创建自己的单独类等。如果有人有任何推荐的资源,可以逐步详细介绍如何实现方法和类,我们将不胜感激 编辑:感谢Farmer和wazdev的回
为什么“GradeStatistic”方法是从同一个类中调用“AverageGrade”的有效方法,而我的“RoundResult”方法不能在同一个类中?正如错误所说,命名空间不能包含方法。您应该将它们放在一个类中:
namespace Grades
{
public static class GradeUtil {
public static string LetterGrade { ... }
private static double RoundResult(double result) { ... }
}
public class GradeStatistics
{
public float AverageGrade = 50;
public float HighestGrade = 78;
public float LowestGrade = 11;
}
}
注意单词
static
。它允许您在没有对象实例的情况下调用方法。也就是说,您可以编写GradeUtil.LetterGrade…
。现在还不清楚,cut看起来是您想要的。之所以出现此错误消息,是因为您的命名空间声明中有两个方法—它们需要包装在一个类中
一个可能的解决方案是创建一个“GradeCalculator”类,并将两个方法放在其中。。。请注意,这不是最佳解决方案,但我已尝试尽可能少地修改:
namespace Grades
{
public class GradeCalculator
{
public string LetterGrade
{
get
{
string result;
if (RoundResult(GradeStatistics.AverageGrade) >= 90)
{
result = "A";
}
else if (RoundResult(GradeStatistics.AverageGrade) >= 80)
{
result = "B";
}
else if (RoundResult(GradeStatistics.AverageGrade) >= 70)
{
result = "C";
}
else
{
result = "F";
}
return result;
}
}
private double RoundResult(double result)
{
double r;
r = Math.Round(result);
return r;
}
}
public static class GradeStatistics
{
public static float AverageGrade = 50;
public static float HighestGrade = 78;
public static float LowestGrade = 11;
}
}
谢谢你的回答,瓦兹德夫。我理解了错误信息,但仍然很难理解它。为什么“GradeStatistic”方法是从同一个类中调用“AverageGrade”的有效类,而我的“RoundResult”方法不能在同一个类中?GradeStatistics类及其成员是静态的。这意味着您在使用该类之前不需要实例化该类,只需调用GradeStatistics.Average grade即可访问该值。如果希望以相同的方式访问RoundResult,可以将其方法签名更新为静态(即:private static double RoundResult(double result){。。。。。。。
namespace Grades
{
public class GradeCalculator
{
public string LetterGrade
{
get
{
string result;
if (RoundResult(GradeStatistics.AverageGrade) >= 90)
{
result = "A";
}
else if (RoundResult(GradeStatistics.AverageGrade) >= 80)
{
result = "B";
}
else if (RoundResult(GradeStatistics.AverageGrade) >= 70)
{
result = "C";
}
else
{
result = "F";
}
return result;
}
}
private double RoundResult(double result)
{
double r;
r = Math.Round(result);
return r;
}
}
public static class GradeStatistics
{
public static float AverageGrade = 50;
public static float HighestGrade = 78;
public static float LowestGrade = 11;
}
}