Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Общие вопросы по .NET и C# > Как создавать функции и процедуры в visual c#


Автор: Chernikov1975 11.2.2011, 08:13
Народ!
Как можно создавать функцию или процедуру в visual c#?

Автор: jonie 11.2.2011, 08:20
никак. В C# возможны только методы классов.

Автор: KelTron 11.2.2011, 10:36
Можно - статические функции, но их можно создавать только внутри классов. Это не методы, т.к. this туда не передаётся..

Автор: kemiisto 11.2.2011, 11:23
Цитата(KelTron @  11.2.2011,  08:36 Найти цитируемый пост)
Это не методы, т.к. this туда не передаётся.. 

Кругом новая физика, а у нас тут новая информатика. smile 

Цитата(KelTron @  11.2.2011,  08:36 Найти цитируемый пост)
статические функции

Они вообще то статические методы называются. smile 

Автор: KelTron 11.2.2011, 12:25
Цитата(kemiisto @  11.2.2011,  11:23 Найти цитируемый пост)
Они вообще то статические методы называются.

Ладно, по поводу терминологии спорить не буду - гиблое это дело, но по смыслу и функциональности "статические методы" аналог процедур и функций.

Автор: neutrino 13.2.2011, 09:59
Цитата(KelTron @  11.2.2011,  11:25 Найти цитируемый пост)
по смыслу и функциональности "статические методы" аналог процедур и функций. 

Ну как сказать. Дело в том, что статические методы - это тоже методы класса только какого? Eсли вы вызовите GetType(), то вернется ссылка на ОБЪЕКТ класса типа вашего класса (Type Object) и в нем то и сидят все статические методы, поля и т.д. Type Object есть всегда только один (если класс используется), и его методы компилируются JIT-ом только по мере использования.

Ты возможно имел в виду, что статичный метод отличается от обычных методов класса хотя бы тем, что ему не передают this. Это тоже неточно. this ему передают (скорее всего smile ), но только какого типа этот this?

Рассмотрим следующий код:

Код

class SomeClass
{
    private static int field;

    public static void SetFieldValue(int value)
    {
        field = value;
    }

    // Other methods
}


Для начала, давайте подумаем когда создается Type Object этого класса? Ясно во время выполнения, а значит его ссылка (адресс) не известна в момент компиляции. Следовательно, метод SetFieldValue должен получить ссылку на объект Type Object класса SomeClass. Т.е. то, что выполняется на самом деле: 
Код

someClassObject.GetType().SetFieldValue(someClassObject.GetType(), value)
, ну или что-то типа того. Это все стоит проверить с помощью ildasm-а. Интересно.


Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)