无法从另一个类调用方法

时间:2016-12-31 01:06:18

标签: c# class methods

我是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();

        }
    }
}

3 个答案:

答案 0 :(得分:1)

默认情况下,没有访问修饰符的任何方法或字段或属性都是私有的。这意味着它们只能由同一个类中的成员访问。您必须使用GetBiggest()修饰符标记public方法才能从外部访问它。

public static void GetBiggest()
{
}

有关更多信息,请参阅https://msdn.microsoft.com/en-us/library/wxh6fsc7.aspx

答案 1 :(得分:0)

我知道你在学习,所以我会给你一些指示。

  1. 任何具有static关键字的方法,属性或字段意味着它只能通过类访问,而不能通过类的实例访问。因此,在您的情况下,它将是Calculate.GetBiggest(),因为Calculate是该类的名称。
  2. 如果您想使用该类的实例访问它,则必须删除static关键字。
  3. 实例方法可以访问所有实例字段,属性,方法以及所有静态方法。
  4. 静态成员只能访问静态字段,属性和方法。
  5. 因此,为了使代码正常工作,因为您正在创建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()

该课程必须公开才能被访问