继承-行使
本文关键字:-行使 继承 | 更新日期: 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;
如果不另行指定,编译器将默认将您的声明设为私有声明。