A Visual Studio elindítása után a File menüből válasszuk ki a New Project elemet. Ennek hatására megnyílik az Új projekt varázsló, ahol különféle projektek közül választhatunk.
A Visual Studio úgynevezett Solution fájlokban gondolkodik. Egy Solution több projektet is tartalmazhat. A tényleges projektekből fog összeállni a nagy alkalmazás kódja. A sorozat további részeinek a kódja egy nagy Solution fájlban lesz elérhető, ezért a varázslóval egyelőre csak egy üres Solution fájlt hozok létre, ami a Templates/Other Project Types/Visual Studio Solutions szekcióban található.
A Solution fájl megnyitása után hozzá kell adni ténylegesen egy projektet. Ezt úgy tudjuk megtenni, hogy a CTRL+W,S gombokkal (CTRL+W, majd a CTRL gombot nyomva tartva S) megnyitjuk a Solution Explorert, vagy a View menün keresztül.
A Solutiont kijelölve jobb gombbal kattintunk a nevén, majd a megjelenő menüben az Add menü New Project… menüpontjára kattintunk.
Az Új projekt hozzáadása ablakban a Visual C# szekció Console Application menüpontját válasszuk ki. A projektnek én a pelda01_hello_world nevet adtam.
A Console Application egy parancssoros alkalmazás, grafikus felület nélkül. Grafikus alkalmazásokat a sorozat későbbi részeiben fogunk készíteni, a nyelvi elemek megtanulásához bőven elég parancssoros alkalmazásokat készíteni.
A projekt létrejötte után kezdhetnénk is a program írását, azonban egy esztétikai beállítást még végezzünk el. A Tools menüt lenyitva válasszuk ki az utolsó, Options menüpontot. A megjelenő ablakban pedig keressük ki a Text Editior/All Languages beállítás panelt, majd a Line Numbers jelölőnégyzet mellé tegyünk egy pipát. Ez bekapcsolja a szerkesztőben a sorok számozását.
A beállítás után nincs más dolgunk, mint megírni az első programunkat. Az alapértelmezetten generált forráskódba egy extra sort kell beírnunk, amit elég csak részben begépelnünk, mivel a Visual Studio rendelkezik egy nagyon fejlett kódkiegészítési funkcióval, amelyet IntelliSense-nek neveznek.
Ez a funkció minden támogatott nyelv esetén elérhető, de leginkább C# nyelvhez lett fejlesztve a funkció, mivel belsőleg nagyon támaszkodik .NET komponensekre.
using System;
namespace PeldaHelloWorld
{
class Program
{
static void Main(string[] args)
{
Console.WriteLine("Helló C# Világ");
Console.ReadKey();
}
}
}
A program kimenete:
Helló C# Világ
A kód egy using utasítással kezdődik. Ez a System névteret veszi használatba. A .NET keretrendszer beépített komponensei a System névtérben és annak alárendelt névtereiben találhatóak meg. Az, hogy melyik névteret tudjuk elérni a programunkból, attól függ, hogy milyen szerelvényeket (Assembly) rendeltünk a programhoz. A szerelvény egy DLL fájl, ami névtereket és osztályokat tartalmaz. A jelenlegi alkalmazás elkészítéséhez nem kell plusz szerelvényeket hozzárendelnünk a programhoz.
Minden programnak definiálnia kell egy saját névteret, ezért kezdődik a program egy namespace utasítással. Azonosítók elnevezése a C szerű nyelvekhez hasonlóan nem kezdődhet számmal, de a C és C++ megkötéseivel szemben azonban mindenféle karaktert tartalmazhatnak, még ékezetes betűket is, mivel a forráskódok UTF-8 kódolással tárolódnak.
A névtér lényegében arra jó, hogy elkülönítse az osztályok neveit és hatóköreit. Leginkább egy mappaként fogható fel. A későbbiekben szerepüket majd részletesen tárgyaljuk.
Az egyetlen Program nevű osztályunk egy Main függvényt tartalmaz. Több osztályunk is lehet több Main függvénnyel, de az lesz a valódi fő függvény, amelyik statikus elérésű és Main nevű. A függvény a futtatási paramétereket egy szöveg típusú tömbön keresztül kapja meg. A C és C++ nyelvekkel ellentétben C# esetén a tömb is típus, ezért függvény eredményeként és argumentumaként is lehet tömböt használni.
A Console osztály a konzolt reprezentálja, amelybe adatokat tudunk bekérni és azokat kiírni. A Console osztály WriteLine metódusa egy sort ír a képernyőre, amely jelen esetben a "Helló C# Világ" üzenet. Kiíráskor itt is használhatunk speciális és ékezetes karaktereket.
C# és .NET esetén az osztályok és a függvények elnevezései az úgynevezett PascalCase írásmódot követik, ami azt jelenti, hogy ha egy osztály vagy függvény neve több szóból áll, akkor a szavak között nem kötőjellel vagy aláhúzással választjuk el a rész szavakat, hanem az egyes szavakat nagy kezdőbetűvel, szóközök nélkül írjuk le. Ezt az elnevezési sémát érdemes betartani, ha kódot publikálunk. Lokális és osztály privát változóknál a CamelCase írásmód preferált, amiben az első kezdőbetű mindig kisbetű.
Továbbá annak ellenére, hogy lehetőségünk van akár kínai karakterekkel teleszórni a programunkat, nem ajánlott sem ékezetes, sem speciális karaktereket használó elnevezéseket alkalmazni. Bevált gyakorlat, hogy a megjegyzéseket és a függvények elnevezéseit angol nyelven írjuk, főleg, ha a kódunkat nagy közönség elé akarjuk tárni.
C# 10 vagy újabb nyelvi változatok esetén az első C# programunk egyszerűb felépítésű lesz:
Console.WriteLine("Helló C# Világ");
A C# 10 megjelenésével radikálian egyszerűsítettek bizonyos dolgokat, hogy kezdőbarátabb legyen a nyelv. Ez azonban nem jelenti azt, hogy a korábbi szintaxis elavult lenne, vagy nem működne. A C# 10 ilyen terű újításai csupán szintaxis "fűszerek", mivel a háttérben a fordító a korábban bemutatott kódhoz nagymértékben hasonlót generál ki fordítás előtt.