继承 - 运动

时间:2011-06-29 07:30:04

标签: c#

好吧,我正在学习继承,我已经做了一些事情,这就是代码:

class array
{
    int [] arr;
    public array(int[] arr)
    {
        this.arr = arr;
    }
    public int Biggest()
    {
        return arr.Max();
    }
    public int Min()
    {
        return arr.Min();
    }
    public int SumArr()
    {
        return arr.Sum();
    }
}
class array2 : array
{
    public array2(int [] arr):base(arr)
    {
    }
    public double Average()
    {
        return 
    }
}

现在,在派生类中我需要得到数组的平均值而我不能做arr.Average() 错误说:Error 1 'ConsoleApplication1.array.arr' is inaccessible due to its protection level C:\Users\x\AppData\Local\Temporary Projects\ConsoleApplication1\Program.cs 35 20 ConsoleApplication1 谁能告诉我我做错了什么? 谢谢你的帮助!

6 个答案:

答案 0 :(得分:6)

由于您未指定可见性类型,因此

arr被声明为私有。如果将其更改为protected,那么您的子类array2将能够访问它。

protected int [] arr;

答案 1 :(得分:1)

在您的示例中,您已隐含arr数组private,其中您省略了修饰符本身。如果您想在派生类中提供对所述field的访问权限,则需要使用protected的访问修饰符:

protected int[] arr;

但是不建议以这种方式公开字段,因为字段应该是私有类状态。您应该做的是通过属性封装对该字段的只读访问权限:

protected int[] Array { 
    get { return this.arr; }
}

在您的派生类中,您可以:

public double Average()
{
    return this.Array.Average();
}

答案 2 :(得分:0)

由于您没有为arr显式定义访问类型,因此它隐式设置为private。为了能够从派生类访问它,您应该将其设置为protected。

protected int [] arr;

有更好的方法可以做到这一点,例如通过财产,但这是一般的想法。

答案 3 :(得分:0)

在C#中,类成员的默认访问级别为private。您尚未为int [] arr指定访问级别,因此它为private,因此对其他类可见。

答案 4 :(得分:0)

那是因为你的arr字段是私有的。考虑使用write-private读保护属性,如下所示:

class array
{
    protected int[] arr {get; private set; }
    public array(int[] arr)
    {
        this.arr = arr;
    }
    public int Biggest()
    {
        return arr.Max();
    }
    public int Min()
    {
        return arr.Min();
    }
    public int SumArr()
    {
        return arr.Sum();
    }
}
class array2 : array
{
     public array2(int [] arr):base(arr)
     {
     }
     public double Average()
     {
        return arr.Average();
     }
}

答案 5 :(得分:-2)

将public或protected添加到arr变量:

public int [] arr; 
protected int [] arr; 

如果没有另外指定,编译器将默认将声明设为私有。