继承-行使

本文关键字:-行使 继承 | 更新日期: 2023-09-27 18:00:42

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

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 谁能告诉我我做错了什么?谢谢你的帮助!

继承-行使

arr被声明为私有,因为您没有指定可见性类型。如果您将其更改为protected,那么您的子类array2将能够访问它。

protected int [] arr;

在您的示例中,您将arr数组简单地制作为private,其中省略了修饰符本身。如果您想在派生类中提供对所述field的访问,则需要使用protected:的访问修饰符

protected int[] arr;

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

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

这意味着在你的派生类中,你可以:

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

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

这是因为您的arr字段是私有的。考虑使用写-私有-读保护的属性,如下所示:

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();
     }
}

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

protected int [] arr;

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

将public或protected添加到arr变量:

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

如果不另行指定,编译器将默认将您的声明设为私有声明。