是什么导致了'不一致的可访问性'下面的代码有错误

本文关键字:有错误 代码 访问 不一致 是什么 | 更新日期: 2023-09-27 18:18:37

错误:

错误1不一致的可访问性:字段类型'System.Collections.Generic.List<Lines>'比field更难接近'Star.lines' J:' documentation 'Universiteit Utrecht - Game技术/模型/系统Ontwikkeling'Assignment4'ShapeDrawing'ShapeDrawing' stars .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));
        }
    }
}

我已经试着调查这个错误的原因。它似乎是由公共类使用的公共字段引起的。在这种情况下,似乎方法和字段都是公共的,所以我不确定问题是什么。

事先感谢任何帮助。

是什么导致了'不一致的可访问性'下面的代码有错误

如果要在类上公开类型,则该类型必须至少与类具有相同的可访问性。

在你的例子中,StarCalculateGeometrypublic,所以Lines,因为它暴露在一个公共方法上,也必须是公共的。

您可以将其设置为公共,或者将类的可访问性降低为等于或小于Lines类。

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

From the docs:

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

公共 class Star

你的Lines类比Star更难访问。

修改Lines的访问权限为public