KO CSharp Keyword managed function pointer calling convention - LIHACHTETAN/ClassicUO-Bad-Newbie-CSharp-Scripts-IDE GitHub Wiki

Π£ΠΊΡ€Π°Ρ—Π½ΡΡŒΠΊΠ° Β· Русский Β· English Β· Deutsch Β· FranΓ§ais Β· Italiano Β· EspaΓ±ol Β· 繁體中文 Β· ζ—₯本θͺž Β· ν•œκ΅­μ–΄

C#: managed β€” ν•¨μˆ˜ 포인터 호좜 κ·œμΉ™

ν•Έλ“œλΆ C# Β· μ‹€μš© κ°€μ΄λ“œ

Delegate* μœ ν˜•μ—μ„œ κ΄€λ¦¬λ˜λŠ” 것은 κ΄€λ¦¬λ˜λŠ” 톡화 계약을 μ§€μ •ν•©λ‹ˆλ‹€. μ΄λŠ” κΈ°λ³Έ μ˜΅μ…˜μ΄κΈ°λ„ ν•©λ‹ˆλ‹€. μ£Όμ†ŒλŠ” 정적 λ©”μ„œλ“œμ˜ & μ—°μ‚°μžλ‘œ κ°€μ Έμ˜΅λ‹ˆλ‹€. 포인터 μ„ μ–Έ 및 ν˜ΈμΆœμ€ μ•ˆμ „ν•˜μ§€ μ•Šμ€ μ»¨ν…μŠ€νŠΈμ—μ„œ μ‹€ν–‰λ©λ‹ˆλ‹€. ν”„λ‘œμ νŠΈλŠ” μ•ˆμ „ν•˜μ§€ μ•Šμ€ 블둝을 ν—ˆμš©ν•΄μ•Ό ν•©λ‹ˆλ‹€. ν•¨μˆ˜ ν¬μΈν„°λŠ” λŒ€λ¦¬μž κ°œμ²΄κ°€ μ•„λ‹™λ‹ˆλ‹€.

κ°„λ‹¨ν•œ 예제 (Example.cs)

이 예제λ₯Ό Example.cs둜 λ”°λ‘œ μ €μž₯ν•˜κ³  이 νŽ˜μ΄μ§€μ˜ λ‹€λ₯Έ μ˜ˆμ œμ™€ λ…λ¦½μ μœΌλ‘œ μ‹€ν–‰ν•˜μ„Έμš”.

Example.cs:

// PROJECT-EXAMPLE
unsafe
{
    delegate* managed<int, int> twice = &Twice;
    System.Console.WriteLine(twice(4));
}
static int Twice(int value) => value * 2;

ν”„λ‘œμ νŠΈμ—μ„œ <AllowUnsafeBlocks>true</AllowUnsafeBlocks>λ₯Ό ν™œμ„±ν™”ν•˜μ„Έμš”. ν¬μΈν„°λŠ” ν‘œμ‹œλœ λ²”μœ„ λ‚΄μ—μ„œλ§Œ μœ νš¨ν•©λ‹ˆλ‹€.

κ²°κ³Ό:

8

톡사둠

delegate* managed<int, int> operation = &Transform;

μ œκ³±μ„ κ³„μ‚°ν•˜λŠ” 정적 λ©”μ„œλ“œμ˜ μ£Όμ†Œ

파일 Example.csproj:

<Project Sdk="Microsoft.NET.Sdk">
  <PropertyGroup>
    <OutputType>Exe</OutputType>
    <TargetFramework>net10.0</TargetFramework>
    <LangVersion>14.0</LangVersion>
    <Nullable>enable</Nullable>
    <AllowUnsafeBlocks>true</AllowUnsafeBlocks>
  </PropertyGroup>

</Project>

파일 Program.cs:

using System;

internal static unsafe class Program
{
    public static void Main()
    {
        delegate* managed<int, int> square = &Square;
        Console.WriteLine(square(7));
    }
    private static int Square(int value) => value * value;
}

κ²°κ³Ό:

49

μ„ νƒν•œ μž‘μ—…μ„ λ‹€λ₯Έ λ©”μ„œλ“œμ— 전달

파일 Example.csproj:

<Project Sdk="Microsoft.NET.Sdk">
  <PropertyGroup>
    <OutputType>Exe</OutputType>
    <TargetFramework>net10.0</TargetFramework>
    <LangVersion>14.0</LangVersion>
    <Nullable>enable</Nullable>
    <AllowUnsafeBlocks>true</AllowUnsafeBlocks>
  </PropertyGroup>

</Project>

파일 Program.cs:

using System;

internal static unsafe class Program
{
    public static void Main()
    {
        delegate* managed<int, int, int> combine = &Add;
        Console.WriteLine(Apply(combine, 8, 3));
        combine = &Subtract;
        Console.WriteLine(Apply(combine, 8, 3));
    }
    private static int Apply(delegate* managed<int, int, int> operation, int left, int right)
        => operation(left, right);
    private static int Add(int left, int right) => left + right;
    private static int Subtract(int left, int right) => left - right;
}

κ²°κ³Ό:

11
5

곡식 좜처: Microsoft ν•™μŠ΅.

⚠️ **GitHub.com Fallback** ⚠️