Я знаю, что вопрос inconsistent accessibility
часто задают, и у меня другой вопрос, потому что мне нужно, чтобы он был закрытым.
Позвольте мне дать подробное объяснение: у меня есть статический класс Line
и структура LingSegment
в Line
, пользователи могут определять свои собственные LineSegment
в Line
, и мне нужно убедиться, что между линейными сегментами нет конфликта.
Архитектура выглядит следующим образом:
public static class Line {
private struct LineSegment {
public LineSegment(int start, int end) {
Start = start;
End = end;
}
public readonly int Start;
public readonly int End;
}
// User created LineSegment
static public LineSegment Segment1() {
return new LineSegment(1, 2);
}
static public LineSegment Segment2() {
return new LineSegment(3, 6);
}
}
И когда пользователи хотят получить доступ к своим линейным сегментам, они могутдоступ только как:
int start = Line.Segment1.Start;
int end = Line.Segment1.End;
Причина, по которой я задаю LineSegment
как private
, заключается в следующем: я хочу, чтобы пользователи создавали LineSegment
и получали к нему доступ только через статические функции в Line
, например Segment1
, Segment2
.Так что я могу добавить модульный тест, используя отражение, чтобы получить все методы в Line
, и получить начало и конец всех сегментов линии, тогда я могу судить, существует ли конфликт между сегментами линии.
Если LineSegment
общедоступен, пользователи могут взломать свой код, просто используя: new Line.LineSegment(2, 5)
, и я не могу обнаружить его с помощью модульного теста.Я не хочу, чтобы они создавали LineSegment
за пределами Line
.
Но в C # запрещено делать LineSegment
из-за несовместимой доступности .Есть ли какое-либо решение, которое может удовлетворить мое требование?Спасибо!