C#与构造函数的奇怪问题

时间:2010-11-17 16:34:15

标签: c# constructor

我有三个参数构造函数的恕我直言非常奇怪的问题,当我尝试运行该程序时,visual studio只显示一个错误:“'Sort.HeapSort'不包含一个带有3个参数112 35”的构造函数。 / p>

namespace Sort
{
    class HeapSort
    {
        private int[] A;
        private int heapSize;
        private int min; 
        private int max; 
        Random myRandom = new Random(); 

        HeapSort(int size, int min1, int max1) //this is the three argument constructor.
        {
            heapSize = size - 1;
            min = min1;
            max = max1;
            A = new int[size];
        }    
    }

    class Program
    {
        static void Main(string[] args)
        {
            int size = 30;
            int min = 0;
            int max = 100;

            HeapSort myHeapSort = new HeapSort(size,min,max); //In this line is the bug
        }
    }
}

8 个答案:

答案 0 :(得分:9)

您的构造函数被声明为private,因为您省略了访问说明符。在构造函数定义之前添加public关键字。

答案 1 :(得分:3)

您需要将构造函数指定为public,因此:

public HeapSort(int size, int min1, int max1) 

编译器允许您省略辅助功能说明符,默认为private。一点点语法糖,我想要的IMO将被废除。

所以,既然你有一个私有构造函数,你的客户端代码就不会“看到”它,编译器会尝试调用公共构造函数,这自然会导致你看到的错误。

答案 2 :(得分:2)

您的构造函数不是公共的,它是私有的(您没有包含任何修饰符,因此默认为private)因此调用代码无法“看到”它。

变化:

HeapSort(int size, int min1, int max1)

要:

public HeapSort(int size, int min1, int max1)

答案 3 :(得分:1)

您需要将public添加到构造函数中,否则会将其视为private,因此无法在Main()内访问。

答案 4 :(得分:1)

具有三个参数的构造函数上没有可访问性修饰符,因此默认为private

将声明更改为public HeapSort(int size, int min1, int max1),您将会感觉良好。

答案 5 :(得分:0)

在构造函数之前,您似乎缺少'public'关键字。

答案 6 :(得分:0)

让你的构造函数公开!

答案 7 :(得分:0)

您的构造函数是私有的。它需要公开。