Týden 4
Struktura programu
Klíčovou organizační koncepcí v jazyce C# jsou programy, obory názvů, typy, členya sestavení. Programy deklarují typy, které obsahují členy a mohou být uspořádány do oborů názvů. Příklady typů jsou třídy, struktury a rozhraní. Příklady členů jsou pole, metody, vlastnosti a události. Když jsou programy C# kompilovány, jsou fyzicky zabaleny do sestavení. Sestavení mají obvykle příponu .exe
souboru nebo .dll
v závislosti na tom, zda implementují .exe
nebo knihovny, v uvedeném pořadí.
Jako malý příklad zvažte sestavení, které obsahuje následující kód:
{
Entry _top; public void Push(T data)
{
_top = new Entry(_top, data);
} public T Pop()
{
if (_top == null)
{
throw new InvalidOperationException();
}
T result = _top.Data;
_top = _top.Next; return result;
} class Entry
{
public Entry Next { get; set; }
public T Data { get; set; } public Entry(Entry next, T data)
{
Next = next;
Data = data;
}
}
}
" style="box-sizing: inherit; outline-color: inherit; font-family: SFMono-Regular, Consolas, "Liberation Mono", Menlo, Courier, monospace; font-size: 1em; direction: ltr; border: 0px; padding: 0px; line-height: 1.3571; display: block; position: relative;">namespace Acme.Collections;public class Stack<T>
{
Entry _top; public void Push(T data)
{
_top = new Entry(_top, data);
} public T Pop()
{
if (_top == null)
{
throw new InvalidOperationException();
}
T result = _top.Data;
_top = _top.Next; return result;
} class Entry
{
public Entry Next { get; set; }
public T Data { get; set; } public Entry(Entry next, T data)
{
Next = next;
Data = data;
}
}
}
Plně kvalifikovaný název této třídy je Acme.Collections.Stack
. Třída obsahuje několik členů: pole s názvem _top
, dvě metody pojmenované Push
a Pop
a vnořená třída s názvem Entry
. Entry
Třída dále obsahuje tři členy: vlastnost s názvem Next
, vlastnost s názvem Data
a konstruktor. Stack
Je Stack
třída. Má jeden parametr typu, který je nahrazen konkrétním typem, T
když je použit.
Zásobník je kolekce "first in-last-out" (filo). Do horní části zásobníku jsou přidány nové prvky. Když je prvek odebrán, je odebrán z horní části zásobníku. Předchozí příklad deklaruje Stack
typ, který definuje úložiště a chování pro zásobník. Můžete deklarovat proměnnou, která odkazuje na instanci Stack
typu pro použití této funkce.
Sestavení obsahují spustitelný kód ve formě instrukcí pro převodní jazyk (IL) a symbolické informace ve formě metadat. Předtím, než se spustí, kompilátor JIT (just-in-time) prostředí .NET Common Language Runtime převede kód IL v sestavení na kód specifický pro procesor.
Vzhledem k tomu, že sestavení je samo-popisující jednotku funkcí obsahující kód i metadata, není nutné #include
direktivy a hlavičkové soubory v jazyce C#. Veřejné typy a členy obsažené v konkrétním sestavení jsou zpřístupněny v programu v jazyce C# pouhým odkazováním na toto sestavení při kompilování programu. Například tento program používá Acme.Collections.Stack
třídu ze acme.dll
sestavení:
();
s.Push(1); // stack contains 1
s.Push(10); // stack contains 1, 10
s.Push(100); // stack contains 1, 10, 100
Console.WriteLine(s.Pop()); // stack contains 1, 10
Console.WriteLine(s.Pop()); // stack contains 1
Console.WriteLine(s.Pop()); // stack is empty
}
}
" style="box-sizing: inherit; outline-color: inherit; font-family: SFMono-Regular, Consolas, "Liberation Mono", Menlo, Courier, monospace; font-size: 1em; direction: ltr; border: 0px; padding: 0px; line-height: 1.3571; display: block; position: relative;">class Example
{
public static void Main()
{
var s = new Acme.Collections.Stack<int>();
s.Push(1); // stack contains 1
s.Push(10); // stack contains 1, 10
s.Push(100); // stack contains 1, 10, 100
Console.WriteLine(s.Pop()); // stack contains 1, 10
Console.WriteLine(s.Pop()); // stack contains 1
Console.WriteLine(s.Pop()); // stack is empty
}
}
Pro zkompilování tohoto programu byste se museli odkazovat na sestavení obsahující třídu zásobníku definovanou v předchozím příkladu.
Programy v jazyce C# mohou být uloženy v několika zdrojových souborech. Při kompilaci programu v jazyce C# jsou všechny zdrojové soubory zpracovávány společně a zdrojové soubory mohou volně odkazovat na sebe. V koncepčním případě je to, že všechny zdrojové soubory byly před zpracováním sloučeny do jednoho velkého souboru. Předávací deklarace nejsou v jazyce C# nikdy potřeba, protože s malým počtem výjimek je pořadí deklarací nedůležité. C# neomezuje zdrojový soubor na deklaraci pouze jednoho veřejného typu, ani nevyžaduje název zdrojového souboru, aby odpovídal typu deklarovanému ve zdrojovém souboru.