KO CSharp Keyword allows - LIHACHTETAN/ClassicUO-Bad-Newbie-CSharp-Scripts-IDE GitHub Wiki

ะฃะบั€ะฐั—ะฝััŒะบะฐ ยท ะ ัƒััะบะธะน ยท English ยท Deutsch ยท Franรงais ยท Italiano ยท Espaรฑol ยท ็น้ซ”ไธญๆ–‡ ยท ๆ—ฅๆœฌ่ชž ยท ํ•œ๊ตญ์–ด

C#: allows

ํ•ธ๋“œ๋ถ C# ยท ์‹ค์šฉ ๊ฐ€์ด๋“œ

ref struct ์ œํ•œ ์ œํ•œ ํ—ˆ์šฉ์„ ์‚ฌ์šฉํ•˜๋ฉด ref struct๋ฅผ ์ œ๋„ค๋ฆญ ํ˜•์‹์ด๋‚˜ ๋ฉ”์„œ๋“œ์— ๋Œ€ํ•œ ์ธ์ˆ˜๋กœ ์ „๋‹ฌํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๊ฐ ์ธ์ˆ˜๊ฐ€ ref ๊ตฌ์กฐ์ฒด์ผ ํ•„์š”๋Š” ์—†์Šต๋‹ˆ๋‹ค. ์ด๋Ÿฌํ•œ T๊ฐ€ ์žˆ๋Š” ์ฝ”๋“œ๋Š” ๋งํฌ ์•ˆ์ „ ๊ทœ์น™์„ ๋”ฐ๋ผ์•ผ ํ•˜๋ฉฐ ๋ณต์‹ฑ์„ ์ˆ˜ํ–‰ํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค. ์ œํ•œ ๋ฐฉ์ง€๋Š” ๋‹ค๋ฅธ ์ œํ•œ ์‚ฌํ•ญ ๋’ค์— ์ž‘์„ฑ๋ฉ๋‹ˆ๋‹ค.

๊ฐ„๋‹จํ•œ ์˜ˆ์ œ (Example.cs)

์ด ์˜ˆ์ œ๋ฅผ Example.cs๋กœ ๋”ฐ๋กœ ์ €์žฅํ•˜๊ณ  ์ด ํŽ˜์ด์ง€์˜ ๋‹ค๋ฅธ ์˜ˆ์ œ์™€ ๋…๋ฆฝ์ ์œผ๋กœ ์‹คํ–‰ํ•˜์„ธ์š”.

Example.cs:

// PROJECT-EXAMPLE
void Ignore<T>(T value) where T : allows ref struct { }
System.Span<int> values = stackalloc int[2];
Ignore(values);
System.Console.WriteLine(values.Length);

๊ฒฐ๊ณผ:

2

ํ†ต์‚ฌ๋ก 

static int Measure<T>(T value) where T : IMeasured, allows ref struct;
static void Reset<T>(scoped ref T value) where T : allows ref struct;

๋ฐ•์‹ฑ์ด ์—†๋Š” ์ฐธ์กฐ ๊ตฌ์กฐ์ฒด์— ๋Œ€ํ•œ ์ธํ„ฐํŽ˜์ด์Šค ๊ณ„์•ฝ

using System;

public interface IMeasured { int Length { get; } }
public readonly ref struct NumberView : IMeasured
{
    private readonly ReadOnlySpan<int> values;
    public NumberView(ReadOnlySpan<int> values) => this.values = values;
    public int Length => values.Length;
}
internal static class Program
{
    public static void Main()
    {
        ReadOnlySpan<int> values = stackalloc int[] { 4, 8, 15 };
        var view = new NumberView(values);
        Console.WriteLine(Measure(view));
    }
    private static int Measure<T>(T value) where T : IMeasured, allows ref struct
        => value.Length;
}

๊ฒฐ๊ณผ:

3

Span ๋ฐ ์ผ๋ฐ˜๋ฒˆํ˜ธ์— ๋Œ€ํ•œ ์žฌ์„ค์ • ๊ธฐ๋Šฅ 1๊ฐœ

using System;

internal static class Program
{
    public static void Main()
    {
        Span<int> scratch = stackalloc int[] { 1, 2, 3 };
        int counter = 7;
        Reset(ref scratch);
        Reset(ref counter);
        Console.WriteLine($"Span length: {scratch.Length}; counter: {counter}");
    }
    private static void Reset<T>(scoped ref T value) where T : allows ref struct
        => value = default!;
}

๊ฒฐ๊ณผ:

Span length: 0; counter: 0

๊ณต์‹ ์ถœ์ฒ˜: Microsoft ํ•™์Šต.

โš ๏ธ **GitHub.com Fallback** โš ๏ธ