Repository navigation
IT CSharp Keyword alias
Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
Un alias di assembly esterno aggiunge uno spazio dei nomi root separato. Consente di distinguere tra nomi di tipo completamente qualificati identici provenienti da assembly diversi. Gli alias sono specificati per i riferimenti nel progetto; nel codice l'alias viene dichiarato tramite alias esterno e utilizzato con l'operatore ::.
Salvare insieme tutti i file mostrati ed eseguire Example.csproj. Il file Example.cs da solo non configura il riferimento con 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.csprojRisultato:
7
extern alias Legacy;
using OldLabel = Legacy::Shared.Label;File 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>File 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);
}
}File Dependency/Dependency.csproj:
<Project Sdk="Microsoft.NET.Sdk"><PropertyGroup><TargetFramework>net10.0</TargetFramework></PropertyGroup></Project>File Dependency/Label.cs:
namespace Shared;
public sealed class Label(string text)
{
public string Text { get; } = text;
}Risultato:
Local library
File 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>File 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)}");
}
}File LegacyDependency/LegacyDependency.csproj:
<Project Sdk="Microsoft.NET.Sdk"><PropertyGroup><TargetFramework>net10.0</TargetFramework></PropertyGroup></Project>File LegacyDependency/Counter.cs:
namespace Shared;
public static class Counter { public static int Scale(int value) => value * 2; }File ModernDependency/ModernDependency.csproj:
<Project Sdk="Microsoft.NET.Sdk"><PropertyGroup><TargetFramework>net10.0</TargetFramework></PropertyGroup></Project>File ModernDependency/Counter.cs:
namespace Shared;
public static class Counter { public static int Scale(int value) => value * 3; }Risultato:
Old: 10
New: 15
Fonte ufficiale: Microsoft Impara.
ClassicUO — Bad Newbie & C# Scripts IDE