Neu in .NET 8.0 [5]: Typaliasse in C# 12.0
Typen können in der aktuellen Version von C# durch das Schlüsselwort using einen alternativen Namen erhalten.

(Bild: Piyawat Nandeenopparit / Shutterstock.com)
- Dr. Holger Schwichtenberg
Seit C#-Sprachversion 12.0 gibt es mit Typaliassen die Möglichkeit, für einen Typen einen alternativen Namen zu definieren. Typen können dabei C#-Typen, NET-Basisklassen/-Strukturen oder eigene Klassen/Strukturen sein.
Das in C# schon mehrfach verwendete SchlĂĽsselwort using
erhält dabei eine weitere Bedeutung.
Wenn man schreibt
using Numbers = int[];
kann man fortan Numbers
anstelle von int[]
bei Typdeklarationen verwenden:
Numbers numbers = new int[10];
Allerdings darf man den Alias nicht bei der Instanziierung verwenden:
Numbers numbers = new Numbers;
Auch kann man leider keinen Alias mithilfe eines Alias definieren. Folgendes ist somit ebenfalls nicht erlaubt:
using DbIntList = List<DbInt>;
Zweites Beispiel: DbInt
als Alias fĂĽr ein int?
Nullable<int>
:
using DbInt = int?;
// ermöglicht:
public DbInt LoadNumberFromDatabase()
{
try
{
…
}
catch (Exception)
{
return null;
}
}
DbInt n;
n = LoadNumberFromDatabase();
Console.WriteLine(n == null ? "null" : n);
Drittes Beispiel: Typalias fĂĽr ein Tupel
using Measurement = (string Units, int Distance);
// ermöglicht:
public Measurement Add(Measurement m1, Measurement m2)
{
if (m1.Units == m2.Units)
{
return (m1.Units, m1.Distance + m2.Distance);
}
else
{
throw new Exception("Units do not match!");
}
}
…
Measurement m1 = ("m", 100);
Console.WriteLine(m1.Distance + " " + m1.Units);
Measurement m2 = ("m", 42);
Console.WriteLine(m2.Distance + " " + m2.Units);
Measurement m3 = Add(m1, m2);
Console.WriteLine(m3);
Viertes Beispiel: Typalias fĂĽr eine .NET-Klasse
using MyPerson = BO.Person;
Anders als beim Int-Array-Alias numbers
ist hier eine Verwendung bei der Instanziierung gestattet:
MyPerson p = new MyPerson();
MyPerson[] pArray = new MyPerson[10];
Ein Typalias muss am Beginn einer Datei auĂźerhalb von allen Typimplementierungen (Klassen, Strukturen) stehen. Er darf vor oder nach den using
-Anweisungen für Namensraumimporte und vor oder nach der Namensraumdeklaration stehen. Ausnahme: Wenn der Typalias nicht nur für eine Datei, sondern alle Dateien im Projekt gelten soll, dann muss der Alias vor dem Namensraum stehen und zusätzlich das Schlüsselwort global
besitzen. Ein Typalias kann nicht fĂĽr andere Projekte exportiert werden. Er muss in jedem .NET-Projekt einmal deklariert sein, wenn er verwendet wird.
global using Measurement = (string Units, int Distance);
using BO;
namespace BL;
// Typaliasse dĂĽrfen im Namensraum stehen
using Numbers = int[];
using DbInt = int?;
using MyPerson = Person;
class MeineKlasse
{
…
}
(rme)