Я начинающий/промежуточный программист, идущий от Java до C#, и немного читал о функциях на codeproject.com. Я понимаю, что пространство имен в C# эквивалентно пакетам в java. Использование пространства имен совпадает с импортом пакета, хотя возможно иметь вложенное пространство имен. Классы существуют в пространствах имен, а методы существуют внутри классов. Но где-то я читал, что функции не зависят от класса? Тогда функции не методы? Означает ли это, что в C# вы можете определять функции вне классов в пространствах имен и использовать их как методы в классе после импорта пространства имен? В практическом использовании, скажем, если я пытаюсь написать Math Library, было бы лучше написать функции или статические методы? Есть ли разница в использовании между этими двумя?Уточнение функций - это свойство, специальный код, другое слово для процедуры/подпрограммы или более одного определения?
Как вы можете сказать, я также немного смешался с фактическим определением функции. Является ли это свойством (математическое свойство, где каждый вход имеет один вывод), который может иметь любой код? Если да, значит ли это, что статические методы также являются функциями (если они не зависят от переменной вне ее области)? Является ли это особым типом метода/подпрограммы, определяемым с помощью синтаксиса delegate/other, который может передаваться как параметры и присваиваться переменным? Ответы на вопрос о переполнении стека difference between methods and functions, похоже, немного отличаются, и принятый ответ отличается от лучших результатов поиска в googling.
Я понимаю, что есть несколько вопросов, но они кажутся взаимосвязанными (по крайней мере, для меня). Все эти определения подпрыгивают вокруг моей бедной головы, и все, что разъясняет концепцию или исправляет мое заблуждение, было бы большой помощью. Объяснения с примерами будут изумительными, поскольку у меня возникают проблемы с терминологией. Спасибо.
Это зависит от используемых определений.В общем случае * метод * является * типом функции *, связанной с экземпляром. Таким образом, методы * являются * функциями с дополнительным свойством/ограничением. Однако другие виды * «функций» * (т. Е. Func, Action, delegate в C#) являются «независимыми» от любого экземпляра. Свойства вообще не считаются функциями вообще (хотя некоторое свойство может представлять/оценивать функции, а «get'-свойства в C# могут выполнять произвольный код ..). – user2864740
@ user2864740 Боги, функции сбивают с толку. Таким образом, функция здесь отличается от математического определения функции тогда (часть из одного входа одного выхода)? Независимо от того, имеете ли вы в виду, что они могут использоваться вне класса или что они должны быть объявлены в классе, но могут быть доступны без создания экземпляра класса? – Ellyl
Только функциональные языки программирования обычно придерживаются более строгого определения, Haskell является одним из лучших примеров. В других языках функция обычно представляет собой «некоторый« предопределенный код », который вызывается для создания материала, который может возвращать значение и/или выполнять другие побочные эффекты». Не так аккуратно :) – user2864740