При переопределении метода из родительского класса; что означает NotImplementedException ()? - PullRequest
1 голос
/ 05 февраля 2010

Вот пример:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace SharpLibrary_MediaManager
{
    public class Picture:BaseFile
    {
        public override void GetFileInformation()
        {
            throw new NotImplementedException();
        }

        public override void GetThumbnail()
        {
            throw new NotImplementedException();
        }
    }
}

Почему они автоматически генерируются для меня и какой цели они служат? Мне очень любопытно. :)

Ответы [ 2 ]

3 голосов
/ 05 февраля 2010

Это то, что IDE вставляет, чтобы автоматически сгенерированный код компилировался. Он не может вставить пустой метод, потому что может потребоваться возвращаемое значение. Помещая исключение, анализатор достижимости выводит, что все пути в методе либо возвращают значение, либо бросают, и поэтому не будут жаловаться. Он также служит для напоминания во время выполнения (когда вы пытаетесь выполнить указанный метод), что вам нужно написать тело для метода.

Вы всегда должны заменять throw new NotImplementedException(); собственной логикой.

Я также считаю NotImplementedException очень полезным при выполнении TDD. Я пишу несколько тестов, а затем мне нужно добавить код в тестируемый класс, чтобы мои тесты действительно компилировались. Я просто напишу определение метода и добавлю тело с throw new NotImplementedException(); (конечно, для этого определен фрагмент кода). Тогда мои тесты скомпилируются и потерпят неудачу (красный). Затем я напишу тела, пока мои тесты не пройдут (зеленый). Затем, для отдыха, сделайте время рефакторинга.

0 голосов
/ 05 февраля 2010

Это код заглушки. Вы должны изменить это, на самом деле делать работу, но она все равно будет компилироваться, прежде чем вы это сделаете. Код выдаст только ошибку, если вы вызовете этот метод.

...