Practically speaking, the difference is symantecs.
Note the declarations below:
, returns a value:
Function fname (param1 AS <data type>, ...) AS <return type>
C#, returns a value:
<return type> fname (<data type> param1, ...)
, does not return a value:
Sub fname (param1 AS <data type>, ...)
C#, does not return a value:
void fname (<data type> param1, ...)
In general, any code-structure that has a name and a parameter list (may be empty) can be referred to as a function. Any member of a class that can be referred to as a function can also be referred to as a method. In the .NET world, only VB
makes the distinction between those that return a value (Function) and those that don't (Sub).
For more in-depth details, you might check out, "What is the Common Language Specification?" found at
If you really, really want to get into it, you could start reading about memory management, stacks, and heaps, or you explore the general theory of programming...