是什么导致以下代码中出现“不一致的可访问性”错误?

时间:2015-10-20 18:51:25

标签: c#

错误:

  

错误1可访问性不一致:字段类型   'System.Collections.Generic.List<Lines>'比字段更难访问   'Star.lines' J:\ Documenting \ Universiteit Utrecht - Game   技术\ Modelleren en Systeem   Ontwikkeling \ Assignment4 \ ShapeDrawing \ ShapeDrawing \ Star.cs 15 24 ShapeDrawing

导致错误的代码:

public class Star : Shape
{

    private int x;
    private int y;
    private int width;
    private int height;
    public List<Lines> lines; // TODO: Ask explanation for cause of error. 

    public Star (int x, int y, int width, int height)
    {
        this.x = x;
        this.y = y;
        this.width = width;
        this.height = height;
    }

    public override void CalculateGeometry()
    {
        lines = new List<Lines>();

        int numPoints = 5;
        Point[] pts = new Point[numPoints];
        double rx = width / 2;
        double ry = height / 2;
        double cx = x + rx;
        double cy = y + ry;

        double theta = -Math.PI / 2;
        double dtheta = 4 * Math.PI / numPoints;
        int i;
        for (i = 0; i < numPoints; i++)
        {
            pts[i] = new Point(
                Convert.ToInt32(cx + rx * Math.Cos(theta)),
                Convert.ToInt32(cy + ry * Math.Sin(theta)));
            theta += dtheta;
        }

        for (i = 0; i < numPoints; i++)
        {
            lines.Add(new Lines(pts[i].X,
                                pts[i].Y,
                                pts[(i + 1) % numPoints].X,
                                pts[(i + 1) % numPoints].Y));
        }
    }
}

我试过调查错误的原因。这似乎是由公共阶层使用的公共领域引起的。在这种情况下,似乎方法和字段都是公共的,所以我不确定问题是什么。

提前感谢您的任何帮助。

2 个答案:

答案 0 :(得分:0)

公开 <ui-select>

class Star课程的可访问性低于Lines

Star的访问权限更改为公开

答案 1 :(得分:0)

如果要在类上公开类型,则类型必须至少与类一样可访问。

在您的情况下,StarCalculateGeometrypublic,因此Lines,因为它在公开方法中公开,也必须公开。

您可以将其公开,或者将该类的可访问性降低到等于或小于Lines类。

Lines可能是internal,因为如果您不添加访问修饰符,这是默认设置。

来自docs

  • public
    • 访问不受限制。
  • protected
    • 访问仅限于从包含类派生的包含类或类型。
  • internal
    • 访问仅限于当前程序集。
  • protected internal
    • 访问仅限于从包含类派生的当前程序集或类型。
  • private
    • 访问仅限于包含类型。