Примечание.
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
В этой статье рассматриваются следующие ошибки компилятора:
- CS0132: "конструктор": статический конструктор должен быть без параметров.
- CS0514: в статическом конструкторе не может быть явного вызова конструктора "this" или "base".
- CS0515: модификаторы доступа запрещены для статических конструкторов.
- CS0516: конструктор "конструктор" не может вызывать себя.
- CS0517: "class" не имеет базового класса и не может вызывать базовый конструктор.
- CS0522: структуры не могут вызывать конструкторы базового класса.
- CS0526: интерфейсы не могут содержать конструкторы экземпляров.
- CS0568: структуры не могут содержать явные конструкторы без параметров.
- CS0573: объявление поля: нельзя использовать инициализаторы полей экземпляра в структурах.
- CS0710: статические классы не могут иметь конструкторы экземпляров.
- CS0768: конструктор не может вызываться с помощью другого конструктора.
- CS1018: Ожидается ключевое слово "this" или "base".
- CS8054: перечисления не могут содержать явные конструкторы без параметров.
- CS8091: не может быть экстерном и иметь инициализатор конструктора.
- CS8358: не удается использовать конструктор атрибутов, так как он имеет параметры in или ref readonly.
- CS8813: инициализатор модуля должен быть обычным методом-членом.
- CS8814: метод инициализатора модуля должен быть доступен на уровне модуля.
- CS8815: метод инициализатора модуля должен быть статическим и не виртуальным, не должен иметь параметров и должен возвращать "void"
- CS8816: метод инициализатора модуля не должен быть универсальным и не должен содержаться в универсальном типе.
- CS8861: список непредвиденных аргументов.
- CS8862: Конструктор, объявленный в типе со списком параметров, должен иметь инициализатор конструктора this.
- CS8867: Конструктор доступных копий не найден в базовом типе "{0}".
- CS8868: Конструктор копирования в записи должен вызывать конструктор копирования базового класса или конструктор объекта без параметров, если запись наследует от объекта.
- CS8878: конструктор копирования "{0}" должен быть общедоступным или защищенным, так как запись не запечатана.
- CS8900: инициализатор модуля не может быть атрибутом UnmanagedCallersOnly.
- CS8901: "method" имеет атрибут unmanagedCallersOnly и не может вызываться напрямую. Получите указатель функции на этот метод.
- CS8902: метод атрибутируется с параметром UnmanagedCallersOnly и не может быть преобразован в тип делегата. Получите указатель функции на этот метод.
- CS8910: главный конструктор конфликтует с синтезированным конструктором копирования.
- CS8958: Конструктор структуры без параметров должен быть открытым.
- CS8982: Конструктор, объявленный в структуре со списком параметров, должен иметь инициализатор "this", который вызывает основной конструктор или явно объявленный конструктор.
- CS8983: Структура с инициализаторами полей должна содержать явно объявленный конструктор.
- CS9105: невозможно использовать в этом контексте основной параметр конструктора.
- CS9106: идентификатор является неоднозначным между типом и параметром в этом контексте.
- CS9108: не удается использовать параметр, имеющий тип ref внутри анонимного метода, лямбда-выражения, выражения запроса или локальной функции.
-
CS9109: не удается использовать
ref,outилиinпервичный параметр конструктора внутри элемента экземпляра. - CS9110: Не удается использовать основной параметр конструктора, имеющий тип ref-like внутри элемента экземпляра.
- CS9111: анонимные методы, лямбда-выражения, выражения запросов и локальные функции внутри члена экземпляра структуры не могут получить доступ к параметру основного конструктора.
- CS9112: анонимные методы, лямбда-выражения, выражения запросов и локальные функции внутри структуры не могут получить доступ к основному параметру конструктора, который также используется внутри элемента экземпляра.
- CS9114: первичному параметру конструктора типа только для чтения не может быть присвоено значение (за исключением инициализатора только для init или инициализатора переменной).
- CS9115: первичный параметр конструктора типа только для чтения не может быть возвращен ссылкой для записи.
- CS9116: основной параметр конструктора типа readonly нельзя использовать для передачи по ref или out (за исключением сеттера, доступного только для инициализации типа, или инициализатора переменной).
- CS9117: Члены параметров основного конструктора типа readonly не могут быть изменены (за исключением сеттера только для инициализации или инициализатора переменной).
- CS9118: Элементы основного параметра конструктора типа только для чтения не могут быть возвращены изменяемой ссылкой.
-
CS9119: Члены основного параметра конструктора типа readonly нельзя использовать в качестве значения
refилиout(за исключением сеттера, только для инициализации, типа или в инициализаторе переменной). - CS9120: Не удается вернуть основной параметр конструктора по ссылке.
- CS9121: параметр типа в первичном конструкторе структуры вызывает цикл в макете структуры.
- CS9122: список непредвиденных параметров.
- CS9136: не удается использовать основной параметр конструктора типа внутри члена объекта.
Кроме того, в этой статье рассматриваются следующие предупреждения:
- CS0824: Конструктор "name" помечен как внешний.
- CS9107: параметр записывается в состояние охватывающего типа, и его значение также передается в базовый конструктор. Это значение может быть захвачено и базовым классом.
- CS9113: параметр нечитабельный.
- CS9124: параметр фиксируется в состоянии заключенного типа, а его значение также используется для инициализации поля, свойства или события.
- CS9179: основной параметр конструктора затеняется членом из базового класса
- CS9018: Автоматически реализованное свойство считывается до явного назначения, что приводит к предыдущему неявному присвоению значения по умолчанию.
- CS9019: Поле считывается до того, как его явно назначают, что вызывает предшествующее неявное назначение значением "по умолчанию".
- CS9020: Объект 'this' считывается до назначения всех его полей, что вызывает предшествующие неявные назначения 'по умолчанию' для полей, не назначенных явно.
- CS9021: Управление возвращается вызывающему до явного назначения автоматически реализованного свойства, вызывая неявное назначение значения 'по умолчанию'.
- CS9022: элемент управления возвращается вызывающему объекту до явного назначения поля, вызывая предыдущее неявное назначение по умолчанию.
Статические конструкторы
- CS0132: "конструктор": статический конструктор должен быть без параметров.
- CS0514: статический конструктор не может иметь явный вызов конструктора "this" или "base".
- CS0515: модификаторы доступа не допускаются для статических конструкторов.
Статические конструкторы инициализируют статические данные для типа. Дополнительные сведения см. в разделе "Статические конструкторы".
Чтобы исправить эти ошибки, убедитесь, что объявление статического конструктора следует следующим правилам:
- Удалите все параметры из объявления статического конструктора, так как статический конструктор должен быть без параметров (CS0132). Если необходимо передать значения инициализации, рекомендуется использовать статические поля или свойства, заданные перед запуском статического конструктора.
- Удалите любые модификаторы доступа, такие как
public,protected,privateилиinternalиз статического конструктора, потому что среда выполнения управляет тем, когда выполняется статический конструктор, и модификаторы доступа не имеют значения (CS0515). - Удалите любые
: base()вызовы инициализатора: this()конструктора из статического конструктора, так как статические конструкторы не могут вызывать другие конструкторы (CS0514). Среда выполнения автоматически вызывает статический конструктор базового класса, если он существует.
Объявление конструктора
- CS0526: интерфейсы не могут содержать конструкторы экземпляров.
- CS0710: статические классы не могут иметь конструкторы экземпляров.
- CS8054: Перечисления не могут содержать явные конструкторы без параметров.
- CS8358: не удается использовать конструктор атрибутов, так как он имеет параметры in или refonly.
- CS8091: Конструктор не может быть экстерном и иметь инициализатор конструктора.
Конструкторы можно объявлять только в типах class и struct, включая типы record class и record struct. Дополнительные сведения см. в разделе конструкторы экземпляров.
Чтобы устранить эти ошибки, воспользуйтесь следующими предложениями:
- Переместите конструктор в тип
classилиstructтип, так как нельзя объявлять конструкторы вinterfaceилиenumтипах (CS0526, CS8054). Интерфейсы определяют контракты, но не предоставляют логику инициализации, а типы перечисления определяют их значения во время компиляции. - Удалите конструкторы экземпляров из статических классов, так как статические классы не могут быть инстанцированы и поэтому не могут иметь конструкторы экземпляров (CS0710). Если вам нужна логика инициализации, используйте вместо этого статический конструктор.
- Измените параметры
inилиref readonlyна параметры передачи по значению в конструкторах атрибутов, так как конструкторы атрибутов не поддерживают модификаторы параметровinилиref readonly(CS8358). Среда выполнения создает экземпляры атрибутов с помощью отражения, которое не поддерживает модификаторыinилиref readonly. -
: base()Удалите инициализатор конструктора: this()изexternконструктора, так как экстерн-конструкторы не могут вызывать другие конструкторы (CS8091). Реализация экстерн-конструктора предоставляется внешне, поэтому цепочка конструкторов невозможна.
Следующее предупреждение можно создать для объявлений конструктора:
- CS0824: конструктор объявлен внешним.
Если конструктор помечается extern, компилятор не может проверить, существует ли реализация. Чтобы отключить это предупреждение, предоставьте не внешнюю реализацию или убедитесь, что внешняя реализация связана корректно.
Конструкторы структурных типов
- CS0568: структуры не могут содержать явные конструкторы без параметров.
- CS0573: "объявление поля": в структурах нельзя использовать начальные значения для полей экземпляра.
- CS8958: Конструктор структуры без параметров должен быть "открытым".
- CS8982: Конструктор, объявленный в структуре со списком параметров, должен иметь инициализатор "this", который вызывает основной конструктор или явно объявленный конструктор.
- CS8983: "структуру" с инициализаторами полей должен содержать явно объявленный конструктор.
Типы структур имеют определенные правила для конструкторов и инициализации полей. Дополнительные сведения см. в разделе инициализации структуры и значений по умолчанию статьи "Типы структур ".
Чтобы устранить эти ошибки, воспользуйтесь следующими предложениями:
- Обновитесь до C# 10 или более поздней версии, если вы столкнетесь с ошибкой CS0568 или ошибкой CS0573, так как эти ошибки возникают только в более ранних версиях C#. Современный C# позволяет определять явные конструкторы без параметров и инициализаторы полей в структурах.
- Добавьте модификатор доступа
publicк любому конструктору структуры без параметров, так как такие конструкторы должны быть общедоступными, чтобы обеспечить правильную инициализацию экземпляров структуры и массиваdefault(CS8958). -
: this(...)Добавьте инициализатор для явно объявленных конструкторов в структуре, которая имеет основной конструктор, так как все конструкторы без параметров должны быть связаны с основным конструктором или другим явно объявленным конструктором, чтобы обеспечить согласованность инициализации (CS8982). - Объявите явный конструктор, когда в структуре используются инициализаторы полей, так как компилятору требуется явный конструктор для обеспечения вызова инициализаторов полей (CS8983). Этот конструктор может быть конструктором без параметров и с пустым телом.
Следующие предупреждения указывают на то, что поле или свойство не назначается явным образом перед чтением или перед возвратом элемента управления вызывающему объекту:
- CS9018: автоматически реализованное свойство считывается до того, как ему будет явно назначено значение, что приводит к предшествующему неявному присвоению значения 'по умолчанию'.
- CS9019: Поле считывается до явного назначения, вызывая предыдущее неявное назначение значения 'по умолчанию'.
- CS9020: Объект "this" считывается до назначения всех его полей, что вызывает предыдущие неявные присваивания 'по умолчанию' для неявно назначенных полей.
- CS9021: управление возвращается вызывающему, прежде чем автоматически реализованное свойство явно назначается, что приводит к предыдущему неявному назначению значения по умолчанию.
- CS9022: управление возвращается вызывающему до явного присваивания поля, что приводит к предыдущему неявному присвоению значения 'по умолчанию'.
Чтобы устранить эти предупреждения, явно присвойте всем полям и автоматически реализованным свойствам значения перед их чтением или перед возвратом управления из конструктора (CS9018, CS9019, CS9020, CS9021, CS9022). Когда неинициализированные члены считываются, компилятор неявно назначает им значение default, что может оказаться непредусмотренным поведением.
Вызовы конструктора с base и this
- CS0516: конструктор не может вызывать себя.
- CS0517: "class" не имеет базового класса и не может вызывать базовый конструктор.
- CS0522: структуры не могут вызывать конструкторы базового класса.
- CS0768: Конструктор не может вызывать себя через другой конструктор.
- CS1018: Ожидается ключевое слово "this" или "base".
Используя инициализаторы конструкторов, один конструктор может вызывать другой конструктор с помощью : this() или : base(). Дополнительные сведения см. в разделе "Использование конструкторов".
Чтобы устранить эти ошибки, воспользуйтесь следующими предложениями:
- Разорвать цепочки вызовов циклического конструктора, так как конструктор не может вызывать себя напрямую или косвенно с помощью другого конструктора (CS0516, CS0768). Убедитесь, что в цепочке вызовов конструкторов в конечном итоге есть конструктор, который не вызывает другой конструктор в данном типе.
-
: base()Удалите инициализатор из конструкторов в типах структур или из конструкторовSystem.Object, так как эти типы не имеют конструктора базового класса для вызова (CS0517, CS0522). Типы структур неявно наследуются от System.ValueType, но вы не можете явно вызывать его конструктор. - Завершите инициализатор конструктора или удалите двоеточие (
:) из объявления конструктора, так как когда двоеточие следует сигнатуре конструктора, компилятор ожидаетthis()либо (base()CS1018). Добавьте соответствующий вызов конструктора или удалите двоеточие полностью, если не предполагается использование цепочки вызовов.
Конструкторы записей и копирования
- CS8867: Конструктор доступных копий не найден в базовом типе.
- CS8868: конструктор копирования в записи должен вызывать конструктор копирования базы или конструктор без параметров, если запись наследуется от объекта.
- CS8878: конструктор копирования должен быть общедоступным или защищенным, так как запись не запечатана.
- CS8910: основной конструктор конфликтует с синтезированным конструктором копирования.
В производном типе записи явный конструктор копирования должен вызывать конструктор копирования базового типа с помощью инициализатора : this() . Если запись непосредственно наследуется от System.Object, она может вызывать конструктор объекта без параметров (CS8868).
Записи включают конструктор копирования, синтезированный компилятором. Вы можете написать явный конструктор копирования, но он должен соответствовать определенным требованиям. Компилятор создает ошибки, когда конструкторы копирования записей нарушают следующие требования:
- Базовый тип должен иметь доступный конструктор копирования. Все
recordтипы имеют конструктор копирования. Убедитесь, что базовый тип являетсяrecord, или добавьте в него доступный конструктор копирования (CS8867). - В производном типе записи явный конструктор копирования должен вызывать конструктор копирования базового типа с помощью инициализатора
: base(). Если запись непосредственно наследуется от System.Object, она может вызывать конструктор объекта без параметров (CS8868). - Конструкторы копирования должны быть
publicилиprotected, если тип записи не являетсяsealed. Добавьте соответствующий модификатор доступа в конструктор копирования (CS8878). - Если явный конструктор копирования имеет ту же сигнатуру, что и синтезированный конструктор копирования, то определения конфликтуют. Удалите явный конструктор копирования или измените его подпись (CS8910).
Объявления инициализатора модуля
- CS8813: инициализатор модуля должен быть обычным методом-членом.
- CS8814: метод инициализатора модуля должен быть доступен на уровне модуля.
- CS8815: метод инициализатора модуля должен быть статическим, а не виртуальным, не должен иметь параметров и возвращать "void".
- CS8816: метод инициализатора модуля не должен быть универсальным и не должен содержаться в универсальном типе.
- CS8900: инициализатор модуля не может быть атрибутом UnmanagedCallersOnly.
- CS8901: "method" имеет атрибут unmanagedCallersOnly и не может вызываться напрямую. Получите указатель функции на этот метод.
- CS8902: метод атрибутируется с параметром UnmanagedCallersOnly и не может быть преобразован в тип делегата. Получите указатель функции на этот метод.
Эти ошибки подтверждают требования для методов, помеченных как ModuleInitializerAttribute. Инициализаторы модулей выполняются автоматически при первой загрузке сборки перед выполнением любого другого кода в модуле. Полные правила см. в разделе "Инициализаторы модулей".
Чтобы исправить эти ошибки, примените одно из следующих изменений на основе конкретной диагностики:
- Убедитесь, что метод, помеченный как
[ModuleInitializer]обычный метод, а не метод доступа к свойствам, метод доступа к событиям, локальная функция, лямбда-код, конструктор, деструктор или оператор (CS8813). Компилятор может рассматривать только обычное объявление метода как допустимый целевой объект для инфраструктуры инициализатора модуля. - Сделайте метод инициализатора модуля и все его содержащие типы
internalилиpublic, чтобы метод был доступен вне типа верхнего уровня (CS8814). Среда выполнения должна вызвать метод из созданного кода на уровне модуля, который требует специальных возможностей на уровне модуля. - Объявите метод инициализатора модуля как
staticневиртуальный, без параметров и с типомvoidвозвращаемого значения (CS8815). Среда выполнения вызывает инициализаторы модуля без каких-либо аргументов и отменяет результат, поэтому сигнатура метода должна точно соответствовать этим ограничениям. - Удалите параметры обобщенного типа из метода инициализатора модуля и переместите метод за пределы любого содержащего его обобщенного типа (CS8816). Среда выполнения не может определить, какие аргументы типа следует указать при вызове инициализатора, поэтому универсальные методы и методы в универсальных типах не разрешены.
- Удалите UnmanagedCallersOnlyAttribute из метода инициализатора модуля (CS8900). Инициализаторы модулей вызываются инфраструктурой управляемой среды выполнения, поэтому они не могут быть ограничены только неуправляемыми вызывающими объектами.
- Получите указатель функции вместо прямого вызова метода, помеченного
[UnmanagedCallersOnly](CS8901). Методы, которым присвоен атрибут UnmanagedCallersOnlyAttribute, не могут вызываться из управляемого кода. Используйте оператор&, чтобы получить указатель функции (delegate* unmanaged<...>) в контексте средыunsafeи передайте указатель в неуправляемый код. Если проект еще не разрешает небезопасный код, включитеAllowUnsafeBlocks. - Получите указатель на функцию вместо преобразования метода, помеченного с помощью
[UnmanagedCallersOnly], в тип делегата (CS8902). Методы с атрибутом UnmanagedCallersOnlyAttribute не могут быть представлены как управляемые делегаты, так как соглашение о вызове несовместимо. Вместо этого используйте указатели функций (delegate* unmanaged<...>) в контекстеunsafe. Если проект еще не разрешает небезопасный код, включитеAllowUnsafeBlocks.
Дополнительные сведения см. в разделах ModuleInitializerAttribute и UnmanagedCallersOnlyAttribute.
Объявление основного конструктора
Первичные конструкторы объявляют параметры непосредственно в объявлении типа. Компилятор синтезирует поле для хранения основного параметра конструктора при использовании его в элементах или инициализаторах полей.
Цепочка конструкторов
- CS8861: список непредвиденных аргументов.
- CS8862: Конструктор, объявленный в типе со списком параметров, должен иметь инициализатор конструктора "this".
- CS9122: список непредвиденных параметров.
Если тип имеет основной конструктор, все остальные явно объявленные конструкторы должны быть связаны с ним с помощью : this(...).
Чтобы устранить эти ошибки, воспользуйтесь следующими предложениями:
-
: this(...)Добавьте инициализатор, который передает соответствующие аргументы первичному конструктору, так как все явно объявленные конструкторы должны быть связаны с основным конструктором (CS8862). - Удалите список параметров из ссылки на базовый тип, если базовый тип не имеет основного конструктора, так как синтаксис
class Derived : Base(args)действителен только приBaseналичии первичного конструктора (CS8861). - Удалите список параметров из объявления основного конструктора
interface, так как интерфейсы не могут иметь основных конструкторов (CS9122).
Использование параметров в вызовах базового конструктора
- CS9105: невозможно использовать основной параметр конструктора в этом контексте.
- CS9106: идентификатор неоднозначен между параметром и типом в этом контексте.
Вы можете использовать только параметры первичного конструктора в вызове базового конструктора, если вы их указываете в объявлении основного конструктора.
Чтобы устранить эти ошибки, воспользуйтесь следующими предложениями:
- Переместите использование параметра в базовое предложение объявления типа вместо его использования в вызове явно объявленного конструктора, так как параметры первичного конструктора
: base()могут отображаться только в базовом предложении объявления типа (CS9105). - Переименуйте тип или параметр, если тип и основной параметр конструктора имеют то же имя, так как ссылка становится неоднозначной (CS9106).
Параметры типа ref-like
- CS9108: нельзя использовать параметр с типом ref внутри анонимного метода, лямбда-выражения, выражения запроса или локальной функции.
-
CS9109: не удается использовать
ref,outилиinпервичный параметр конструктора внутри элемента экземпляра. - CS9110: Не удается использовать основной параметр конструктора, имеющий тип ref-like внутри элемента экземпляра.
- CS9136: нельзя использовать основной параметр конструктора типа внутри члена экземпляра.
Чтобы устранить эти ошибки, выполните следующие действия.
- Основные параметры конструктора
ref structтипа имеют ограничения на их использование. Переместите доступ к параметру из лямбда-выражений, выражений запросов или локальных функций (CS9108). В типах, которые не являютсяref struct, параметрыref structследует использовать только в инициализаторах полей или теле конструктора, а не в членах экземпляра (CS9110, CS9136). - Для типов
ref structнельзя использовать параметры первичного конструктора с модификаторамиin,ref, илиoutв методах экземпляра или методах доступа к свойствам. Скопируйте значение параметра в поле в конструкторе и вместо этого используйте это поле в членах экземпляра (CS9109).
Ограничения типов структуры
- CS9111: Анонимные методы, лямбда-выражения, выражения запросов и локальные функции внутри экземпляра члена структуры не могут получить доступ к параметру первичного конструктора.
- CS9112: анонимные методы, лямбда-выражения, выражения запросов и локальные функции внутри структуры не могут получить доступ к параметру первичного конструктора, который также используется внутри члена экземпляра.
- CS9120: Невозможно вернуть параметр основного конструктора по ссылке.
- CS9121: параметр первичного конструктора структуры типа вызывает цикл в макете структуры.
Чтобы устранить эти ошибки, выполните следующие действия.
- В типах структур нельзя записывать параметры первичного конструктора в лямбда-выражениях, выражениях запросов или локальных функциях внутри элементов экземпляра. Скопируйте параметр в локальную переменную или поле перед его использованием в этих контекстах (CS9111, CS9112).
- Нельзя возвращать параметры первичного конструктора по ссылке в типах структур. При необходимости сохраните значение в поле и верните это поле по ссылке (CS9120).
- Убедитесь, что тип параметра первичного конструктора не создает цикл в структуре. Структура не может содержать поле своего типа, ни напрямую, ни косвенно (CS9121).
Ограничения для структуры типа readonly
- CS9114: первичный параметр конструктора типа только для чтения не может быть изменен (за исключением инициализатора только для инициализации или сеттера, предназначенного только для инициализации).
- CS9115: первичный параметр конструктора типа чтения невозможно вернуть по ссылке, доступной для записи.
-
CS9116: основной параметр конструктора типа, доступного только для чтения, нельзя использовать как значение
refилиout(за исключением в сеттере инициализации только для типа или инициализатора переменной). - CS9117: Члены параметров основного конструктора типа только для чтения не могут быть изменены (за исключением сеттера только для инициализации типа или инициализатора переменной).
- CS9118: Члены основного параметра конструктора типа только для чтения не могут быть возвращены изменяемой ссылкой.
-
CS9119: Члены параметра основного конструктора типа только для чтения нельзя использовать в качестве
refилиoutзначения (за исключением сеттера с инициализацией только типа или при инициализации переменной).
Чтобы устранить эти ошибки, выполните следующие действия.
- В
readonly structтипах нельзя изменять параметры первичного конструктора и их члены за пределами установщиков, только для инициализации или начальных инициализаторов переменных. Перенос назначений в инициализаторы полей или сеттеры свойств только для инициализации (CS9114, CS9117). - Нельзя возвращать параметры первичного конструктора и их члены через изменяемую ссылку на
readonly structтипы. Возврат поreadonly ref, или возврат по значению вместо этого (CS9115, CS9118). - Невозможно передать параметры первичного конструктора и их члены как
refилиoutаргументы вreadonly structтипах. Передайте их по значению или в качествеinаргументов (CS9116, CS9119).
Предупреждения для захваченных и теневых параметров
- CS9107: параметр сохраняется в состоянии охватывающего типа, а его значение также передается базовому конструктору. Значение также может быть сохранено базовым классом.
- CS9113: параметр нечитаем.
- CS9124: параметр сохраняется в состоянии включающего типа, а его значение также используется для инициализации поля, свойства или события.
- CS9179: основной параметр конструктора затеняется элементом из базы.
Следующие предупреждения указывают на потенциальные проблемы с хранением или доступом к основным параметрам конструктора:
- Параметр может храниться дважды, если вы передаете его базовому конструктору и обращаетесь к нему в производном типе. Возможно, одна копия в базовом классе и другая в производном классе. Рассмотрите необходимость обоих копий или реструктурирования кода, чтобы избежать дублирования (CS9107).
- Если вы никогда не считываете его, не требуется основной параметр конструктора. Удалите неиспользуемые параметры из объявления основного конструктора (CS9113).
- Параметр может храниться дважды, если вы записываете его в вложенный тип и используете его для инициализации поля, свойства или события. Вместо инициализации отдельного члена (CS9124) рекомендуется использовать захваченный параметр напрямую.
- Член базового типа перекрывает основной параметр конструктора, если оба имеют одно и то же имя. Переименуйте параметр, чтобы избежать путаницы (CS9179).