Почему нам нужно использовать ключевое слово при вызове метода - PullRequest
8 голосов
/ 18 июня 2010

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

Имеет смысл, если компилятор примет аргумент с ключевым словом out или без него, с другой семантикой, но если вы ДОЛЖНЫ добавить ключевое слово для компиляции кода, какая польза? Разве компилятор не должен обрабатывать это автоматически?

То же самое для ref

Ответы [ 5 ]

11 голосов
/ 18 июня 2010

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

7 голосов
/ 18 июня 2010

Это требование не для компилятора. f (x, out y) мгновенно информирует любого, кто читает код, что y будет перезаписано после возврата f, без необходимости искать определение f, сохраняя их умственные циклы ЦП.

3 голосов
/ 18 июня 2010

Может быть потому, что C # позволяет записывать перегрузки следующим образом:

class X
{
    public void Y(int i) { ... }
    public void Y(out int i) { ... }
}

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

И, конечно, когда вы пишете out при вызове метода, вы точно знаете, что этот метод может быть изменен в методе. Это очень читабельно.

MSDN Статья

0 голосов
/ 18 июня 2010

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

0 голосов
/ 18 июня 2010

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

bool TryGetString(string input, out string output)

без указания параметра out, просто взгляните на того, кто вызывает этот метод, с тех пор он не завершится.

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