2017-02-07 2 views
0

В C#Является ли каждая функция в C# методом какого-либо класса?

  1. Является ли каждая функция метод некоторого класса?

  2. Для анонимной функции это какой-то метод какого-то класса?

  3. если ответ на 1 - да, а ответ на 2 - нет, то является анонимной функцией, а не функцией?

Спасибо.

+1

Вы можете перефразировать это как практический вопрос программирования? Есть ли какая-то функция, которую вы хотите использовать, которая принимает только методы класса? –

+0

Компилятор генерирует класс для анонимных делегатов и лямбда-выражений. – MarcinJuraszek

+1

C# не имеет функций. У него есть методы. Да, методы всегда являются членами класса, включая анонимные методы. –

ответ

3

Ответы на вопросы 1 и 2 - «Да». Каждый метод является членом класса, включая анонимные методы. В последнем случае компилятор либо преобразует их в метод экземпляра содержащего типа, либо при необходимости перезаписывает свой код за кулисами, чтобы испустить дополнительный тип класса в IL, который размещает этот метод.

Вот ссылка:

The implementation of anonymous methods in C# and its consequences (part 1)

+0

Стоит отметить, что некоторые утверждения, которые * выглядят как функции, не являются функциями, например в разделе 'typeof (class)' ключевое слово 'typeof' является оператором, а не функцией. Некоторые операторы не являются членами какого-либо класса, но некоторые (например, перегрузки операторов) могут быть. Кроме того, реализации 'extern' методов не содержатся в классе, хотя они и объявлены там. –

+0

Да. Это также часто встречается в Visual Basic, где TryCast(), DirectCast() и If() - все операторы тоже, и это те, которые я помню с самого начала. –

+0

также стоит отметить, что lambdas может генерировать деревья выражений. –

Смежные вопросы