Megjegyzés
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhat bejelentkezni vagy módosítani a címtárat.
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhatja módosítani a címtárat.
Legfelső szintű utasítások – metódusok nélküli
Nem kell explicit módon belefoglalnia egy metódust Main egy konzolalkalmazás-projektbe. Ehelyett a legfelső szintű utasítások funkcióval minimalizálhatja az írandó kódot.
A legfelső szintű utasítások lehetővé teszik végrehajtható kód írását közvetlenül a fájl gyökerénél, így nincs szükség a kód osztályba vagy metódusba való körbefuttatására.
Ez azt jelenti, hogy egy osztály és egy ProgramMain metódus ceremónia nélkül hozhat létre programokat.
Ebben az esetben a fordító létrehoz egy osztályt Program az alkalmazás belépési pont metódusával. A létrehozott metódus neve nem Mainolyan implementációs részlet, amelyet a kód nem tud közvetlenül hivatkozni.
Íme egy Program.cs fájl, amely egy teljes C#-program:
Console.WriteLine("Hello World!");
A legfelső szintű utasítások segítségével egyszerű programokat írhat kis segédprogramokhoz, például az Azure Functionshez és a GitHub Actionshez. Emellett egyszerűbbé teszik az új C#-programozók számára a kód tanulásának és írásának megkezdését.
A következő szakaszok ismertetik a felső szintű utasításokra vonatkozó szabályokat, és mit nem.
Csak egy legfelső szintű fájl
Egy alkalmazásnak csak egy belépési ponttal kell rendelkeznie. Egy projekt csak egy legfelső szintű utasításokkal rendelkező fájllal rendelkezhet. Ha egy projektben több fájlba helyezi a legfelső szintű utasításokat, az a következő fordítóhibát eredményezi:
CS8802 Csak egy fordítási egység rendelkezhet legfelső szintű utasításokkal.
A projektek tetszőleges számú forráskódfájllal rendelkezhetnek, amelyek nem rendelkeznek legfelső szintű utasításokkal.
Nincs más belépési pont
A metódusokat Main explicit módon is megírhatja, de nem működhet belépési pontként. A fordító a következő figyelmeztetést adja ki:
CS7022 A program belépési pontja globális kód; figyelmen kívül hagyva a "Main()" belépési pontot.
A legfelső szintű utasításokkal rendelkező projektekben a -main fordítóval nem választhatja ki a belépési pontot, még akkor sem, ha a projekt egy vagy több Main metódussal rendelkezik.
using Irányelvek
A legfelső szintű utasításokat using tartalmazó egyetlen fájl esetében az irányelveknek kell elsőként szerepelnie ebben a fájlban, ahogyan ebben a példában is látható:
using System.Text;
StringBuilder builder = new();
builder.AppendLine("The following arguments are passed:");
foreach (var arg in args)
{
builder.AppendLine($"Argument={arg}");
}
Console.WriteLine(builder.ToString());
return 0;
Globális névtér
A legfelső szintű utasítások implicit módon szerepelnek a globális névtérben.
Névterek és típusdefiníciók
A legfelső szintű utasításokkal rendelkező fájlok névtereket és típusdefiníciókat is tartalmazhatnak, de a legfelső szintű utasítások után kell lenniük. Példa:
MyClass.TestMethod();
MyNamespace.MyClass.MyMethod();
public class MyClass
{
public static void TestMethod()
{
Console.WriteLine("Hello World!");
}
}
namespace MyNamespace
{
class MyClass
{
public static void MyMethod()
{
Console.WriteLine("Hello World from MyNamespace.MyClass.MyMethod!");
}
}
}
args
A felső szintű utasítások hivatkozhatnak a változóra a args beírt parancssori argumentumok eléréséhez. A args változó soha nem null, de Length nulla, ha nem adtak meg parancssori argumentumokat. Példa:
if (args.Length > 0)
{
foreach (var arg in args)
{
Console.WriteLine($"Argument={arg}");
}
}
else
{
Console.WriteLine("No arguments");
}
await
Az aszinkron metódust a következővel awaithívhatja meg: . Példa:
Console.Write("Hello ");
await Task.Delay(5000);
Console.WriteLine("World!");
Kilépési kód a folyamathoz
Ha egy értéket szeretne visszaadni int , amikor az alkalmazás véget ér, használja az return utasítást, ahogyan egy Main metódusban inttenné. Példa:
string? s = Console.ReadLine();
int returnValue = int.Parse(s ?? "-1");
return returnValue;
Implicit belépési pont metódusa
A fordító létrehoz egy metódust, amely egy legfelső szintű utasításokkal rendelkező projekt programbejegyzési pontjaként szolgál. A metódus aláírása attól függ, hogy a legfelső szintű utasítások tartalmazzák-e a await kulcsszót vagy az utasítást return . Az alábbi táblázat bemutatja, hogyan nézne ki a metódus aláírása a táblázat metódusnevével Main a kényelem érdekében.
| A legfelső szintű kód tartalmazza | Implicit Main aláírás |
|---|---|
await és return |
static async Task<int> Main(string[] args) |
await |
static async Task Main(string[] args) |
return |
static int Main(string[] args) |
Nem await vagy return |
static void Main(string[] args) |
A C# 14-től kezdve a programok fájlalapú alkalmazások lehetnek, ahol egyetlen fájl tartalmazza a programot. Fájlalapú alkalmazásokat futtathat a paranccsal dotnet run <file.cs>, vagy első sorként használja az #!/usr/local/share/dotnet/dotnet run irányelvet (csak Unix-rendszerhéjak esetén).
C# nyelvspecifikáció
További információkért lásd a C# nyelvi specifikációját. A nyelvi specifikáció a C#-szintaxis és -használat végleges forrása.