Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/312.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在C#中重写方法?_C#_Methods - Fatal编程技术网

如何在C#中重写方法?

如何在C#中重写方法?,c#,methods,C#,Methods,在下面的代码中,我试图重写calculate方法,但得到了以下错误。我做错了什么 无法在此作用域中声明名为“calculate”的局部或参数,因为该名称在封闭的局部作用域中用于定义局部或参数 使用系统; 名称空间分配\u 7\u George { 类随机数 { 静态void Main(字符串[]参数) { //初始化变量 int sumof随机数=0; 双平均=0; 双倍合计=0; //创建随机数对象 随机数=新随机数(); //for循环重复二十次以查找1到100之间的随机数 对于(int i

在下面的代码中,我试图重写
calculate
方法,但得到了以下错误。我做错了什么

无法在此作用域中声明名为“calculate”的局部或参数,因为该名称在封闭的局部作用域中用于定义局部或参数

使用系统;
名称空间分配\u 7\u George
{
类随机数
{
静态void Main(字符串[]参数)
{
//初始化变量
int sumof随机数=0;
双平均=0;
双倍合计=0;
//创建随机数对象
随机数=新随机数();
//for循环重复二十次以查找1到100之间的随机数
对于(int i=0;i<20;i++)
{
//求随机数法
int getRandom()
{
int random=1+随机数。下一步(1101);
sumofrandom=sumofrandom+随机;
返回随机数;
}
getRandom();
}
//计算平均数
双重计算(双重随机求和,参考双重平均,整数计数)
{
int x=20;
转换为双(x);
平均值=随机数之和/x;
换算成32(平均值);
收益率平均值;
}
//调用方法
计算(随机总和,参考平均值,20);
WriteLine(“20个随机数的平均值为“+Convert.ToInt32(average)+”);
控制台。写线(“”);
//循环重复5次
对于(int i=0;i<5;i++)
{
Console.Write(“输入双精度值”);
双输入=Convert.ToDouble(Console.ReadLine());
//cal方法将输入添加到总数中
双重计算(双重输入,参考双重总计)
{
总计=总计+输入;
返回总数;
}
//调用方法
计算(输入,参考总数);
//打印结果
如果(i>3)
{
Console.WriteLine(“总计为”+计算(输入,参考总计));
打破
}
}
}
}
}

方法重载不适用于本地函数。代码使用的是局部函数,它们遵循在作用域中定义变量的常规规则——如果父作用域已经包含同名的变量,则不能重新定义它(请参阅)。请注意,与同时使用名称和参数查找匹配函数的类级方法(“方法重载”)不同,该检查只考虑本地方法的名称

你也可以

  • 以不同的方式命名本地函数。如果您尝试的练习是关于局部函数的,那么这可能是有帮助的最佳方法。“Calculate”是一个毫无意义的名称,可能会引起混淆。第二个函数的合理名称应该是“ModifyTotal”
  • 在某些情况下,您可以使用相同的变量并为其分配lambda。如果方法具有相同的签名,这将起作用。在问题所示的情况下,我不会尝试这样做,因为参数是不同的,
    ref
    /
    out
    参数很难正确设置()
  • 通过将方法移出类级别,完全避免局部方法,以允许参数重载工作。请注意,您不能在类级方法中捕获局部变量-因为问题中的方法不会捕获局部变量,在类级移动它们将使main方法更短,更易于遵循
  • 内联本地方法,特别是当它们被调用一次时

方法重载不适用于本地函数。代码使用的是局部函数,它们遵循在作用域中定义变量的常规规则——如果父作用域已经包含同名的变量,则不能重新定义它(请参阅)。请注意,与同时使用名称和参数查找匹配函数的类级方法(“方法重载”)不同,该检查只考虑本地方法的名称

你也可以

  • 以不同的方式命名本地函数。如果您尝试的练习是关于局部函数的,那么这可能是有帮助的最佳方法。“Calculate”是一个毫无意义的名称,可能会引起混淆。第二个函数的合理名称应该是“ModifyTotal”
  • 在某些情况下,您可以使用相同的变量并为其分配lambda。如果方法具有相同的签名,这将起作用。在问题所示的情况下,我不会尝试这样做,因为参数是不同的,
    ref
    /
    out
    参数很难正确设置()
  • 通过将方法移出类级别,完全避免局部方法,以允许参数重载工作。请注意,您不能在类级方法中捕获局部变量-因为问题中的方法不会捕获局部变量,在类级移动它们将使main方法更短,更易于遵循
  • 内联本地方法,特别是当它们被调用一次时

我认为您可能正在为C#和编程的一些基本知识而挣扎。我要做的第一件事是将计算方法移出主方法。使它们也保持静态,因为它不保持任何状态。然后你可以调用随机数。计算(…)。还有很多其他问题。方法中未使用计数。Convert.ToDouble未分配到任何位置。数学有点不对劲。平均值始终固定为20个数字。从编程的最深处跳出来没有问题-我们都是从某个地方开始的,但这不是学习一门学科的最佳方法-它能更好地帮助你走出特定的漏洞。你可以将calculate作为函数名使用两次,
using System;

namespace Assignment_7_George
{
    class RandomNumbers
    {
        static void Main(string[] args)
        {
            // initialize variables
            int sumofrandom = 0;
            double average = 0;
            double total = 0;

            // create random number object
            Random randomNumbers = new Random();

            //for loop that repeats twenty times to find a random number between 1 - 100
            for (int i = 0; i < 20; i++)
            {
                //find random number method
                int getRandom()
                {
                    int random = 1 + randomNumbers.Next(1,101);
                    sumofrandom = sumofrandom + random;
                    return sumofrandom;
                }
                getRandom();
            }

            // calculate average
            double calculate(double sumofrandom, ref double average, int count)
            {
                int x = 20;
                Convert.ToDouble(x);
                average = sumofrandom / x;
                Convert.ToInt32(average);
                return average;
            }

            // call method
            calculate(sumofrandom, ref average, 20);

            Console.WriteLine("The average of the 20 random numbers is " + Convert.ToInt32(average) + ".");
            Console.WriteLine(" ");

            //loop repeats 5 times
            for (int i = 0; i < 5; i++)
            {

                Console.Write("Enter a double value ");
                double input = Convert.ToDouble(Console.ReadLine());
       
                // cal method adds input to total
                double calculate(double input, ref double total)
                {
                    total = total + input;
                    return total;
                }
                // call method
                calculate(input, ref total);

                // prints results
                if (i > 3)
                {
                    Console.WriteLine("The total is " + calculate(input, ref total));
                    break;
                }
            }
        }
    }
}