Генерация пользовательского времени компиляции, предупреждая C#

Это не очень хорошая политика принять произвольные указатели как входные параметры в общедоступном API. Лучше иметь "простые данные" типы как целое число, строка или структура (я имею в виду классическую структуру с простыми данными внутри, конечно; официально что-либо может быть структурой).

, Почему? Хорошо, потому что, поскольку другие говорят, что нет никакого стандартного способа знать, были ли Вы даны допустимая подсказка или та, которая указывает на спам.

, Но иногда у Вас нет выбора - Ваш API должен принять указатель.

В этих случаях, это - обязанность вызывающей стороны передать хороший указатель. ПУСТОЙ УКАЗАТЕЛЬ может быть принят как значение, но не указатель на спам.

можно ли перепроверить всегда? Ну, что я сделал в случае как этот, должен был определить инвариант для типа, на который указывает указатель, и назовите его, когда Вы получаете его (в режиме отладки). По крайней мере, если инвариант перестал работать (или катастрофические отказы), Вы знаете, что были переданы плохое значение.

// API that does not allow NULL
void PublicApiFunction1(Person* in_person)
{
  assert(in_person != NULL);
  assert(in_person->Invariant());

  // Actual code...
}

// API that allows NULL
void PublicApiFunction2(Person* in_person)
{
  assert(in_person == NULL || in_person->Invariant());

  // Actual code (must keep in mind that in_person may be NULL)
}
19
задан Frederik Gheysels 11 January 2012 в 12:55
поделиться