我是C#的初学者。我正在尝试从另一个类调用一个方法但是有一条错误消息“由于它的保护级别而导致方法无法访问”。
这是我的计算类
namespace Cal
{
class Calculate
{
static void GetBiggest()
{
int num1, num2, num3;
Console.WriteLine("First number");
num1 = int.Parse(Console.ReadLine());
Console.WriteLine("Second number");
num2 = int.Parse(Console.ReadLine());
Console.WriteLine("Third number");
num3 = int.Parse(Console.ReadLine());
if (num1 > num2 & num1 > num3)
{
Console.WriteLine("Biggest number is " + num1);
Console.ReadLine();
}
else if (num2 > num1 & num2 > num3)
{
Console.WriteLine("Biggest number is " + num2);
Console.ReadLine();
}
else
{
Console.WriteLine("Biggest number is " + num3);
Console.ReadLine();
}
}
}
}
这是我的主要课程,我试图调用Calculate类
namespace Cal
{
class Program
{
static void Main(string[] args)
{
Calculate a = new Calculate();
a.GetBiggest();
}
}
}
答案 0 :(得分:1)
默认情况下,没有访问修饰符的任何方法或字段或属性都是私有的。这意味着它们只能由同一个类中的成员访问。您必须使用GetBiggest()
修饰符标记public
方法才能从外部访问它。
public static void GetBiggest()
{
}
有关更多信息,请参阅https://msdn.microsoft.com/en-us/library/wxh6fsc7.aspx
答案 1 :(得分:0)
我知道你在学习,所以我会给你一些指示。
static
关键字的方法,属性或字段意味着它只能通过类访问,而不能通过类的实例访问。因此,在您的情况下,它将是Calculate.GetBiggest()
,因为Calculate
是该类的名称。static
关键字。因此,为了使代码正常工作,因为您正在创建Calculate
类的实例,所以需要使该方法不是静态的。默认情况下,该方法是私有的,因此您需要增加其曝光率。设为internal
,如果您需要在程序集外部访问它,请将其设为public
。从最少曝光开始,如果需要,可以按照自己的方式工作。
最后,您可以通过Main
方法从用户获取数字,然后将数字传递给GetBiggest
方法来改进代码。该方法将找到最大的数字并返回它。返回号码后,您可以执行Console.WriteLine("Biggest number is " + biggest);
示例强>
既然你问了一个例子,那么你去吧。它不会编译,因为你必须完成它。我把它留给你作为练习。
using System;
public class Program
{
public static void Main()
{
// To make this event better, make a list like this: List<int> numbers = new List<int>();
// write a do-while loop and tell the user to keep entering numbers and once they want to know the biggest,
// they can enter 'B'. Keep adding numbers to the list until the user enters 'B'. As soon as 'B' is entered,
// then send the list to GetBiggest like this: int biggest = GetBiggest(numbers);
int num1, num2, num3;
Console.WriteLine("First number");
num1 = int.Parse(Console.ReadLine());
Console.WriteLine("Second number");
num2 = int.Parse(Console.ReadLine());
Console.WriteLine("Third number");
num3 = int.Parse(Console.ReadLine());
Calculator calculator = new Calculator();
int biggest = calculator.GetBiggest(num1, num2, num3);
Console.WriteLine("Biggest number is " + biggest);
Console.ReadLine();
}
}
public class Calculator
{
// To make this method even better, send the list here like this: internal int GetBiggest(List<int> numbers)
internal int GetBiggest(int num1, int num2, int num3)
{
if (num1 > num2 & num1 > num3)
{
// You do not need to do any more checks, you know this is the biggest so return and leave this method
return num1;
}
// You do not need else here because if num1 was biggest you would have returned.
// You are here because num1 is not biggest
if (num2 > num1 & num2 > num3)
{
return num2;
}
// I will let you do this one
}
}
另请注意,我将班级名称更改为Calculator
。不应将类命名为动词,而应命名为名词。方法应该是动词。现在听起来像普通英语听起来更清晰易懂。您还应该尝试验证用户输入的数字,因为用户可能会输入12xx
并且您的应用程序将崩溃。使用int.TryParse
方法。 Google请它。
答案 2 :(得分:0)
尝试将此部分代码static void GetBiggest()
更改为public static void GetBiggest()
该课程必须公开才能被访问