【问题标题】:Struggling with how methods and classes interact挣扎于方法和类的交互方式
【发布时间】:2019-07-17 19:16:58
【问题描述】:

我是学习 C# 的新手,我正在尝试实现以下代码,但是我无法这样做,收到错误“命名空间不能直接包含字段或方法等成员”。

namespace Grades
{
    public string LetterGrade
    {
        get
        {
            string result;
            if (RoundResult(AverageGrade) >= 90)
            {
                result = "A";
            }
            else if (RoundResult(AverageGrade) >= 80)
            {
                result = "B";
            }
            else if (RoundResult(AverageGrade) >= 70)
            {
                result = "C";
            }
            else
            {
                result = "F";
            }
            return result;
        }
    }

    private double RoundResult(double result)
    {
        double r;
        r = Math.Round(result);
        return r;
    }

    public class GradeStatistics
    {
        public float AverageGrade = 50;
        public float HighestGrade = 78;
        public float LowestGrade = 11;
    }
}

我想要完成的是创建一个名为“RoundResult”的方法,它将对“AverageGrade”结果进行四舍五入。我只是将其作为一个实验来尝试了解方法之间的交互方式。

我在学习 C# 时面临的最大障碍是关于方法和类、如何正确使用它们、何时将它们放在现有类中或创建自己的单独类等。如果有人有任何推荐的资源去详细介绍如何实现方法和类,将不胜感激。

编辑:感谢 Reputation Farmer 和 wazdev 的回答。我想补充一个问题......

为什么“GradeStatistic”方法是从同一个类中调用“AverageGrade”的有效方法,而我的“RoundResult”方法却不能在同一个类中?

【问题讨论】:

    标签: c#


    【解决方案1】:

    出现此错误消息是因为您的命名空间声明中直接有两个方法 - 它们需要包装在一个类中。

    一种可能的解决方案是创建一个“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;
        }
    }
    

    【讨论】:

    • 感谢 wazdev 的回答。我理解了错误信息,但仍然很难理解它。为什么“GradeStatistic”方法是从同一个类中调用“AverageGrade”的有效类,而我的“RoundResult”方法不能在同一个类中?
    • GradeStatistics 类及其成员是静态的。这意味着您不需要在使用它之前实例化此类,只需调用 GradeStatistics.Average Grade 即可访问该值。如果您想以相同的方式访问 RoundResult,您可以将其方法签名更新为静态(即): private static double RoundResult(double result) { .......
    【解决方案2】:

    正如错误所说,命名空间不能包含方法。你应该把它们放在一个类中:

    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这个词。它允许您调用没有对象实例的方法。 IE。你可以写GradeUtil.LetterGrade ...。不清楚,cut 看起来是你想要的。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-01-06
      • 2023-04-06
      • 2014-08-30
      • 1970-01-01
      • 1970-01-01
      • 2021-04-03
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多