如何在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方法更短,更易于遵循
- 内联本地方法,特别是当它们被调用一次时
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;
}
}
}
}
}