Выполните yarn remove
для каждого из пакетов зависимостей в package.json
(записи dependencies
и devDependencies
). Это должно удалить все зависимости, включая все промежуточные зависимости из yarn.lock
.
P.S. Пара рекомендованных инструментов:
Нет никакого неявного наследования, включенного насколько я могу сказать. Я ожидал бы, что это будет хорошо - хотя я могу вообразить странность, если A и B были универсальны.
Это указано в разделе 10.1.4 из спецификации:
, Когда класс B происходит из класса A, это - ошибка времени компиляции для для зависимости от B. Класс непосредственно зависит от своего прямого базового класса (если таковые имеются), и непосредственно зависит от класса, в котором он сразу вкладывается (если таковые имеются). Учитывая это определение, полный набор классов, от которых зависит класс, является переходным закрытием, непосредственно зависит от отношений.
я выделил соответствующий раздел.
, Который объясняет, почему компилятор отклоняет его, но не, почему язык запрещает его. Интересно, существует ли ограничение CLI...
РЕДАКТИРОВАНИЕ: Хорошо, у меня был ответ от Eric Lippert. В основном это было бы технически возможно (нет ничего в CLI для запрещения его), но:
, было также отмечено на почтовом потоке, что это сделает такого рода вещь допустимой:
A.B x = new A.B.B.B.B.B.B.B.B.B.B.B.B();
..., но это уже было бы (как отмечено Tinister) быть допустимым если B, полученный из A.
Вложение + наследование = нечетность...
Я думаю, что вложение предназначено для представления этого, вложенный тип часть определения вложенного типа. С той интерпретацией ограничение имеет смысл, потому что в то время, когда компилятор поражает определение A, A.B еще не определяется, и даже в конце A, это уже определяется с точки зрения A.B.
Относительно вопросов о том, что я пытался сделать:
В основном, я хотел создать класс, который имел отношения состава с собой, но я не хотел иметь содержащий в нем объект, чтобы содержать другие объекты и поэтому создать цепочку со многими "-A имеет - A имеет - A имеет-..." отношения. Таким образом, моя мысль в то время была, делают что-то вроде этого:
public class A : A.AA
{
public class AA
{
// All of the class's logic
}
private AA _containedObject;
}
, Который в то время казался довольно гладким, но ретроспективно я не так уверен...
я рылся в Google и не нашел хорошего обсуждения его так, я думал, что отправлю его здесь.
Однако в рамках комментариев сообщение в Блоге Eric Lippert он дает примеры класса, реализовывая вложенный интерфейс, а также класс, реализовывая универсальный интерфейс с вложенным классом как аргумент типа (который не компилирует, и он называет "ошибку" в текущем компиляторе). Оба из тех примеров касаются интерфейсов, таким образом, я задавался вопросом, были ли некоторые специальные правила с вложенными классами. И кажется, что существует.
Это не вещь C# так же, как это - вещь компилятора. Одно из заданий компилятора должно разметить класс в памяти, которая является набором типов основных данных, указателей, указателей функции и других классов.
Это не может создать расположение для класса A, пока это не знает, каково расположение класса B. Это не может знать то, чем состоит в том расположение класса B, пока это не закончилось с расположением класса A. Круговая зависимость.
Это не имеет никакого смысла мне... Вы пытаетесь расширить что-то, что не существует!!! Класс B только существует в пределах класса A, и из-за этого я думаю, что существует некоторое наследование.