The program in its core is a sequence of instructions, which make the computer do a certain task. They are being entered by the programmer and are being executed unconditionally by the machine.
The languages from low level manage the hardware directly and require a lot of effort and a large count of commands to do a single task. Languages of higher level require less code for a single task, but do not have a direct access to hardware. With them is being developed an application software, for example web applications and mobile applications.
C# is a compiled language, and that means that we write commands which are being compiled before they're being executed. Exactly these commands, through a help program (a compiler), are being transformed into a file, which can be executed (executable). To write a language like C# we need a text editor or an environment for development and .NET Runtime Environment.
.NET Runtime Environment represents a virtual machine, something like a computer in the computer, which can run a compiled C# code. With the risk of going too deep into details, we have to explain that the language C# is compiled into an intermediary .NET code and is executed from the .NET environment, which compiles this intermediary code additionally into machine instructions (machine code) in order to be executed by the microprocessor. .NET environment contains libraries with classes, CSC compiler, CLR (Common Language Runtime - CLR) and other components, which are required for working with the language C# and run C# programs.
The environment .NET is available as a free software with open source code for every modern operating system (like Windows, Linux and Mac OS X). It has two variations, .NET Framework (the older) and .NET Core (the newer), but none of that is of essential meaning when it comes to getting into programming. Let us focus on writing programs with the language C#.