Throw new notimplementedexception c что это
Перейти к содержимому

Throw new notimplementedexception c что это

Метод или операция не реализована

Есть две формы. Form2 является производным от Form1 .

Но у меня есть проблема с Form2 в режиме разработки, как показано на снимке экрана ниже.

Если я прокомментирую это this._presenter.Retrive(); , все будет работать нормально. Что происходит и как решить проблему?

UPD: Если я уберу закину новый NotImplementedException (); и вставит, например, MessageBox.Show («Test»); каждый раз, когда я буду открывать Form2, MessageBox будет выглядеть так, как будто я запускаю приложение.

 введите описание изображения здесь

Form2

Form1

2 ответа

Основной причиной ошибки является то, что Fᴀʀʜᴀɴ и Юваль сказал:

Но есть еще одна важная вещь, на которую следует обратить внимание.

OP: если я уберу бросок new NotImplementedException (); и воля вставьте, например, MessageBox.Show («Test»); каждый раз, когда я буду открывать Form2 MessageBox будет выглядеть так, как будто я запускаю приложение

Если вы заметили, вы не получите эту ошибку в конструкторе Form1 . Но потому что ваш Form2 наследуется от Form1 вас получить эту ошибку.

Это потому, что когда вы открываете форму в конструкторе, дизайнер создает экземпляр базового класса вашей формы, чтобы показать вашу форму. Это означает, что вместо создания экземпляра Form2 создается экземпляр Form1 , запускает конструктор Form1 и размещает его в области разработки, а затем десериализует коды в InitializeComponent из Form2 и размещает компоненты на поверхности разработки.

Вот почему вы получаете сообщение об ошибке, когда вы видите Form2 в конструкторе, но при открытии Form1 в конструкторе.

Чтобы решить проблему:

    Вы можете удалить реализацию и оставить ее пустой.

Также вы можете предотвратить ошибку, запретив запуск кода в Form_Load , если вы находитесь в режиме разработки, используя DesignMode свойство в Form1_Load :

if (DesignMode) возвращение;

Вы, вероятно, найдете эти ответы полезными и интересными:

  • Невозможно просмотреть конструктор при кодировании формы в C #
  • Показать элементы управления, добавленные программно в приложение WinForms в представлении «Дизайн»

Комментирование части throw new NotImplementedException (); для меня работало нормально Теперь, наконец, метод будет похож на ниже:

Not Implemented Exception Класс

Некоторые сведения относятся к предварительной версии продукта, в которую до выпуска могут быть внесены существенные изменения. Майкрософт не предоставляет никаких гарантий, явных или подразумеваемых, относительно приведенных здесь сведений.

Это исключение выбрасывается, когда запрошенный метод или операция не реализованы.

Примеры

В следующем примере возникает исключение для метода, который не был разработан.

Комментарии

Исключение NotImplementedException возникает, когда определенный метод, метод доступа get или метод доступа set присутствует в качестве члена типа, но не реализован.

NotImplementedException использует реализацию по умолчанию Object.Equals , которая поддерживает равенство ссылок. Список начальных значений для экземпляра NotImplementedExceptionсм. в NotImplementedException конструкторах.

Создание исключения

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

Обработка исключения

Исключение NotImplementedException указывает, что метод или свойство, которые вы пытаетесь вызвать, не имеет реализации и, следовательно, не предоставляет функциональных возможностей. В результате эту ошибку не следует обрабатывать в блоке try/catch . Вместо этого следует удалить вызов члена из кода. Вы можете включить вызов участника при реализации в рабочей версии библиотеки.

В некоторых случаях исключение может не использоваться для указания функциональности, NotImplementedException которая все еще находится в разработке в предварительной библиотеке. Однако это по-прежнему означает, что функциональность недоступна, и следует удалить вызов члена из кода.

NotImplementedException и другие типы исключений

Платформа .NET Framework также включает два других типа исключений, NotSupportedException а PlatformNotSupportedExceptionтакже указывает, что реализация для определенного элемента типа не существует. Вы должны создать одно из них вместо NotImplementedException исключения при следующих условиях.

PlatformNotSupportedException Исключение
Если вы разработали тип с одним или несколькими членами, доступными на некоторых платформах или в некоторых версиях, но не на других, можно создать это исключение на платформах, на которых функциональность не поддерживается.

NotSupportedException Исключение
NotSupportedException Создайте исключение, если реализация члена интерфейса или переопределение метода абстрактного базового класса невозможна. Например, метод создает NotSupportedException исключение, Convert.ToInt32(DateTime) так как нет значимого преобразования между датой и временем и 32-разрядным целым числом со знаком. В этом случае метод должен присутствовать, так как Convert класс реализует IConvertible интерфейс.

Кроме того, следует создать NotSupportedException исключение, если вы реализовали абстрактный базовый класс и добавили в него новый член, который должен быть переопределен производными классами. В этом случае создание абстрактного элемента приводит к сбою загрузки существующих подклассов.

Конструкторы

Инициализирует новый экземпляр класса NotImplementedException стандартными свойствами.

Инициализирует новый экземпляр класса NotImplementedException с сериализованными данными.

Инициализирует новый экземпляр класса NotImplementedException с указанным сообщением об ошибке.

Инициализирует новый экземпляр класса NotImplementedException указанным сообщением об ошибке и ссылкой на внутреннее исключение, вызвавшее данное исключение.

Свойства

Возвращает коллекцию пар «ключ-значение», предоставляющую дополнительные сведения об исключении.

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

Возвращает или задает HRESULT — кодированное числовое значение, присвоенное определенному исключению.

Возвращает экземпляр класса Exception, который вызвал текущее исключение.

Возвращает сообщение, описывающее текущее исключение.

Возвращает или задает имя приложения или объекта, вызывавшего ошибку.

Получает строковое представление непосредственных кадров в стеке вызова.

Возвращает метод, создавший текущее исключение.

Методы

Определяет, равен ли указанный объект текущему объекту.

При переопределении в производном классе возвращает исключение Exception, которое является первопричиной одного или нескольких последующих исключений.

Служит хэш-функцией по умолчанию.

При переопределении в производном классе задает объект SerializationInfo со сведениями об исключении.

Возвращает тип среды выполнения текущего экземпляра.

Создает неполную копию текущего объекта Object.

Создает и возвращает строковое представление текущего исключения.

События

Возникает, когда исключение сериализовано для создания объекта состояния исключения, содержащего сериализованные данные об исключении.

Почему исключение notimplementedexception существует?

Это действительно, действительно УРКС меня, поэтому я надеюсь, что кто-то может дать мне разумное обоснование, почему вещи такие, какие они есть.

Исключение notimplementedexception. Ты меня разыгрываешь, верно?

Нет, я'м не собираюсь брать дешевую попытку, сказав, что «Держись, реализован метод — это бросает исключение notimplementedexception.» Да, что's право, вы должны реализовать метод, чтобы бросить исключение notimplementedexception (в отличие от чисто виртуального вызова функции в C++ — вот в этом есть смысл!). Пока что'ы чертовски смешно, есть более серьезная проблема в моей голове.

Мне просто интересно, в наличием исключение notimplementedexception, как кто-то может делать все, что угодно .Чистая? Вы должны обернуть каждый абстрактный метод вызова с помощью блока try catch, чтобы защититься от методов, которые не могут быть реализованы? Если вы поймать такое исключение, какого черта ты собираешься с ним делать??

Я не вижу способа, чтобы проверить, если метод на самом деле реализуется не называя его. После вызова он может иметь побочные эффекты, я могу'т сделать все мои проверяет до фронта, а затем запустить мой алгоритм. Я должен выполнить мой алгоритм, поймать NotImplementedExceptions и некоторые, как откатить приложение для некоторых нормальное состояние.

Это'с ума. С ума. Безумие. Итак, вопрос: почему исключение notimplementedexception существует?

Как упреждающий удар, я не хочу никого, чтобы ответить, и»потому что дизайнеры должны поставить это в авто-сгенерированный код.» Это ужасно. Я бы скорее авто-сгенерированный код не будет компилироваться, пока вы предоставляете реализации. Например, автоматически сгенерированные реализации может быть «выбросить исключение notimplementedexception;», где на исключение notimplementedexception не определен!

Кто-нибудь перехвачено и обработано исключение notimplementedexception? Вы когда-нибудь оставили исключение notimplementedexception в коде? Если так, сделал это, представляют собой бомбу замедленного действия (т. е., вы случайно оставили ее там), или ошибки проектирования (метод не должны быть реализована и никогда не будет вызван)?

Я'м очень подозрительно исключение notsupportedexception также. не поддерживается? Что? Если это's не поддерживается, почему это часть интерфейса? Может кто-нибудь в Microsoft заклинание неправильное наследование? Но я мог бы начать еще один вопрос, что если я Дон'т получить слишком ругать за это.

This интересно читать на эту тему.

Там, кажется, быть сильным соглашение с Брэд Абрамс, что «исключение notimplementedexception для функции, просто пока не реализована, но действительно должен (и будет). Что-то вроде того, что вы запустите с, когда вы создаете класс, все методы там бросать исключение notimplementedexception, а затем выводят их с настоящим код. «и

Комментарии Джаред Parsons очень слабы и, вероятно, должны быть проигнорированы: исключение notimplementedexception: выдать это исключение, если тип не реализует метод для какой-либо другой причине.

В в MSDN еще слабее по теме, просто заявив, что «Ну исключение, которое выбрасывается, когда запрошенный метод или операция не реализована.&и»

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *