2015-10-20 2 views
1

Ошибка:Что вызывает ошибку «Несоответствующая доступность» в следующем коде?

Error 1 Inconsistent accessibility: field type 'System.Collections.Generic.List<Lines>' is less accessible than field 'Star.lines' J:\Documenting\Universiteit Utrecht - Game Technology\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)); 
     } 
    } 
} 

Я пытался смотреть в причинах ошибки. По-видимому, это связано с тем, что публичное поле используется из открытого класса. В этом случае кажется, что и метод, и поле являются общедоступными, поэтому я не уверен, в чем проблема.

Заранее благодарим за любую помощь.

+8

Вы не показали декларацию 'Lines', но я подозреваю, что это' internal' класс, так что вы не можете использовать его в публичном поле. В стороне, я настоятельно призываю вас не использовать публичные поля в любом случае. –

+0

Да, у вас, скорее всего, есть это: защищенные классы класса (или что-то менее доступное, чем общедоступное, которое будет внутренним, защищенным или закрытым). Измените это на public class Lines. – Scottie

+0

Хорошо, спасибо большое. Как-то я пропустил это каждый раз. Очень ценится. Извините за отправку дубликата. – userX

ответ

0

Если вы раскрываете тип в классе, тогда тип должен быть не менее доступным, чем класс.

В вашем случае, Star и CalculateGeometry являются public, так Lines, как это выставлено на открытый метод, также должен быть публичным.

Вы можете сделать это общедоступным или уменьшить доступность класса равным или меньшим, чем класс Lines.

Lines, вероятно, internal, поскольку это значение по умолчанию, если вы не добавляете модификатор доступа.

От docs:

  • public
    • доступ не ограничен.
  • protected
    • Доступ ограничен содержащего класса или типов, полученного из содержащего класса.
  • internal
    • Доступ ограничен текущей сборки.
  • protected internal
    • Доступ ограничен текущей сборки или типов, полученного из содержащего класса.
  • private
    • Доступ ограничен содержащего типа.
0

общественногоclass Star

Ваш Lines класс менее доступным, чем Star.

Изменение доступа Lines к Публикация.