我想在属性Length和Width中使用内部访问修饰符,但这是不可能的。它会导致错误。然后在main方法中,当我想使用WriteLine方法时,不可能从这个属性中获取值。问题是为什么?我是同一个集会,还是?
namespace AbstractPolygon
{
abstract internal class Polygon
{
public double Length { get; protected set; }
public double Width { get; protected set; }
abstract internal double GetArea();
}
internal class Rectangle:Polygon
{
internal Rectangle(double length,double width)
{
Length = length;
Width = width;
}
override internal double GetArea()
{
return Length * Width;
}
}
internal class Square:Polygon
{
internal Square(double length)
{
Length = length;
}
override internal double GetArea()
{
return Length * Length;
}
}
internal class Program
{
static void Main(string[] args)
{
Rectangle objRectangle = new Rectangle(15,5);
Square objSquare = new Square(97);
Console.WriteLine("Rectangle area of length:{0} and width:{1} is: {2}",
objRectangle.Length, objRectangle.Width, objRectangle.GetArea());
Console.WriteLine("Square area of length:{0} is: {1}", objSquare.Length,
objSquare.GetArea());
}
}
}
答案 0 :(得分:1)
您收到编译错误
'AbstractPolygon.Polygon.Length.set'访问器的辅助功能修饰符必须比属性或索引器'AbstractPolygon.Polygon.Length'更具限制性。
protected
(应用于setter)意味着此setter对派生类是可见的,即使这些类在另一个程序集中,但属性的internal
修饰符也禁止这样做。设置器上的访问修饰符仅允许限制访问,但不允许扩展它。这就是C#抱怨的原因。显然,在做出这个决定时,C#不会查看班级的internal
修饰符。
但是,您不需要在内部创建成员,因为无论如何,类(及其成员)都不会在其他程序集中可见。让会员公开,这不是安全威胁。