Repository navigation
FR CSharp Keyword alias
Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
Un alias d’assembly externe ajoute un espace de noms racine distinct. Il vous permet de faire la distinction entre les noms de types complets identiques provenant de différents assemblys. Des alias sont spécifiés pour les références dans le projet ; dans le code, l'alias est déclaré via un alias externe et utilisé avec l'opérateur ::.
Enregistrez tous les fichiers indiqués ensemble et lancez Example.csproj. Le fichier Example.cs seul ne configure pas la référence portant l’alias Tools.
Example.cs:
// PROJECT-EXAMPLE
extern alias Tools;
System.Console.WriteLine(Tools::Demo.Number.Value);Dependency.cs:
// PROJECT-EXAMPLE
namespace Demo; public static class Number { public static int Value => 7; }Dependency.csproj:
<Project Sdk="Microsoft.NET.Sdk"><PropertyGroup><TargetFramework>net10.0</TargetFramework><EnableDefaultCompileItems>false</EnableDefaultCompileItems></PropertyGroup><ItemGroup><Compile Include="Dependency.cs" /></ItemGroup></Project>Example.csproj:
<Project Sdk="Microsoft.NET.Sdk"><PropertyGroup><OutputType>Exe</OutputType><TargetFramework>net10.0</TargetFramework><EnableDefaultCompileItems>false</EnableDefaultCompileItems></PropertyGroup><ItemGroup><Compile Include="Example.cs" /><ProjectReference Include="Dependency.csproj"><Aliases>Tools</Aliases></ProjectReference></ItemGroup></Project>dotnet run --project Example.csprojRésultat:
7
extern alias Legacy;
using OldLabel = Legacy::Shared.Label;Fichier Example.csproj :
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<OutputType>Exe</OutputType>
<TargetFramework>net10.0</TargetFramework>
<LangVersion>14.0</LangVersion>
<Nullable>enable</Nullable>
</PropertyGroup>
<ItemGroup>
<Compile Remove="Dependency/**/*.cs" />
<ProjectReference Include="Dependency/Dependency.csproj"><Aliases>Legacy</Aliases></ProjectReference>
</ItemGroup>
</Project>Fichier Program.cs :
extern alias Legacy;
using System;
internal static class Program
{
public static void Main()
{
var label = new Legacy::Shared.Label("Local library");
Console.WriteLine(label.Text);
}
}Fichier Dependency/Dependency.csproj :
<Project Sdk="Microsoft.NET.Sdk"><PropertyGroup><TargetFramework>net10.0</TargetFramework></PropertyGroup></Project>Fichier Dependency/Label.cs :
namespace Shared;
public sealed class Label(string text)
{
public string Text { get; } = text;
}Résultat:
Local library
Fichier Example.csproj :
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<OutputType>Exe</OutputType>
<TargetFramework>net10.0</TargetFramework>
<LangVersion>14.0</LangVersion>
<Nullable>enable</Nullable>
</PropertyGroup>
<ItemGroup>
<Compile Remove="LegacyDependency/**/*.cs;ModernDependency/**/*.cs" />
<ProjectReference Include="LegacyDependency/LegacyDependency.csproj"><Aliases>OldApi</Aliases></ProjectReference>
<ProjectReference Include="ModernDependency/ModernDependency.csproj"><Aliases>NewApi</Aliases></ProjectReference>
</ItemGroup>
</Project>Fichier Program.cs :
extern alias OldApi;
extern alias NewApi;
using System;
using OldCounter = OldApi::Shared.Counter;
using NewCounter = NewApi::Shared.Counter;
internal static class Program
{
public static void Main()
{
Console.WriteLine($"Old: {OldCounter.Scale(5)}");
Console.WriteLine($"New: {NewCounter.Scale(5)}");
}
}Fichier LegacyDependency/LegacyDependency.csproj :
<Project Sdk="Microsoft.NET.Sdk"><PropertyGroup><TargetFramework>net10.0</TargetFramework></PropertyGroup></Project>Fichier LegacyDependency/Counter.cs :
namespace Shared;
public static class Counter { public static int Scale(int value) => value * 2; }Fichier ModernDependency/ModernDependency.csproj :
<Project Sdk="Microsoft.NET.Sdk"><PropertyGroup><TargetFramework>net10.0</TargetFramework></PropertyGroup></Project>Fichier ModernDependency/Counter.cs :
namespace Shared;
public static class Counter { public static int Scale(int value) => value * 3; }Résultat:
Old: 10
New: 15
Source officielle : Microsoft Apprendre.
ClassicUO — Bad Newbie & C# Scripts IDE