KO CSharp Keyword alias - LIHACHTETAN/ClassicUO-Bad-Newbie-CSharp-Scripts-IDE GitHub Wiki
ะฃะบัะฐัะฝััะบะฐ ยท ะ ัััะบะธะน ยท English ยท Deutsch ยท Franรงais ยท Italiano ยท Espaรฑol ยท ็น้ซไธญๆ ยท ๆฅๆฌ่ช ยท ํ๊ตญ์ด
ํธ๋๋ถ C# ยท ์ค์ฉ ๊ฐ์ด๋
์ธ๋ถ ์ด์ ๋ธ๋ฆฌ ๋ณ์นญ์ ๋ณ๋์ ๋ฃจํธ ๋ค์์คํ์ด์ค๋ฅผ ์ถ๊ฐํฉ๋๋ค. ์ด๋ฅผ ํตํด ์๋ก ๋ค๋ฅธ ์ด์ ๋ธ๋ฆฌ์ ๋์ผํ ์ ๊ทํ๋ ์ ํ ์ด๋ฆ์ ๊ตฌ๋ณํ ์ ์์ต๋๋ค. ํ๋ก์ ํธ์ ์ฐธ์กฐ๋ฅผ ์ํด ๋ณ์นญ์ด ์ง์ ๋ฉ๋๋ค. ์ฝ๋์์ ๋ณ์นญ์ extern ๋ณ์นญ์ ํตํด ์ ์ธ๋๊ณ :: ์ฐ์ฐ์์ ํจ๊ป ์ฌ์ฉ๋ฉ๋๋ค.
ํ์๋ ๋ชจ๋ ํ์ผ์ ๊ฐ์ ํด๋์ ์ ์ฅํ๊ณ Example.csproj๋ฅผ ์คํํ์ธ์. Example.cs๋ง์ผ๋ก๋ 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.csproj๊ฒฐ๊ณผ:
7
extern alias Legacy;
using OldLabel = Legacy::Shared.Label;ํ์ผ 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>ํ์ผ 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);
}
}ํ์ผ Dependency/Dependency.csproj:
<Project Sdk="Microsoft.NET.Sdk"><PropertyGroup><TargetFramework>net10.0</TargetFramework></PropertyGroup></Project>ํ์ผ Dependency/Label.cs:
namespace Shared;
public sealed class Label(string text)
{
public string Text { get; } = text;
}๊ฒฐ๊ณผ:
Local library
ํ์ผ 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>ํ์ผ 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)}");
}
}ํ์ผ LegacyDependency/LegacyDependency.csproj:
<Project Sdk="Microsoft.NET.Sdk"><PropertyGroup><TargetFramework>net10.0</TargetFramework></PropertyGroup></Project>ํ์ผ LegacyDependency/Counter.cs:
namespace Shared;
public static class Counter { public static int Scale(int value) => value * 2; }ํ์ผ ModernDependency/ModernDependency.csproj:
<Project Sdk="Microsoft.NET.Sdk"><PropertyGroup><TargetFramework>net10.0</TargetFramework></PropertyGroup></Project>ํ์ผ ModernDependency/Counter.cs:
namespace Shared;
public static class Counter { public static int Scale(int value) => value * 3; }๊ฒฐ๊ณผ:
Old: 10
New: 15
๊ณต์ ์ถ์ฒ: Microsoft ํ์ต.