好吧,我正在学习继承,我已经做了一些事情,这就是代码:
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
谁能告诉我我做错了什么?
谢谢你的帮助!
答案 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;
如果没有另外指定,编译器将默认将声明设为私有。