Возможно ли обеспечить принудительные ссылочные типы? - PullRequest
0 голосов
/ 06 ноября 2019

Если библиотека классов была написана с включенными обнуляемыми ссылочными типами, разработчик не всегда может проверить null, так как компилятор не будет выдавать предупреждения / ошибки.

Примите следующий код в библиотеке сРазрешенные типы ссылок, допускающие значение NULL:

public class Class1
{
    public void MyMethod(string s)
    {
        // don't check for null as compiler is happy
        s.ToLower();
    }

    public void MyMethod2(string? s)
    {
        // check for null as compiler is warning otherwise
        if (s != null)
        {
            this.MyMethod(s);
        }
    }
}

Если потребитель вызвал Class1.MyMethod, не включив типы ссылок NULL, они не получат предупреждение при выполнении следующего вызова:

var c = new Class1();
c.MyMethod(null);

ЭтоМожно ли каким-то образом заставить или, по крайней мере, предупредить использование кода, чтобы включить обнуляемые ссылочные типы?

1 Ответ

1 голос
/ 14 ноября 2019

Это невозможно по уважительной причине. Если он может представить, что вы добавляете новую библиотеку в свой проект, и это заставляет вас обновлять сотни тысяч строк кода.

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...