C# Next (C# 12 후보) - slog(완료)

제네릭도 별칭이 됩니다.

2개의 좋아요

토론 에도 언급되있는데,

using IEn<T> = System.Collections.Generic.IEnumerable<T>;
IEn<int> arr = new int[4];

이런느낌으로 제네릭클래스의 이름만 바꾸면서 제네릭파라미터를 이용하고싶어요

2개의 좋아요

아 이런 형태를 말씀하시는 군요.

using L<TValue> = System.Collections.Generic.List<TValue>;

이런 형태는 (아직) 지원하지 않습니다.

2개의 좋아요

반자동 속성(Semi Auto Properties)이 C# 12에 포함되지 않는 것 같네요. 꽤 기다리던 기능 이었는데 아쉽습니다.

3개의 좋아요

정성태님의 C# 12 관련 글:

3개의 좋아요

닷넷: 2150. C# 12 - 정적 문맥에서 인스턴스 멤버에 대한 nameof 접근 허용(Allow nameof to always access instance members from static context) (sysnet.pe.kr)

닷넷: 2151. C# 12 - ref readonly 매개변수 (sysnet.pe.kr)

3개의 좋아요

Experimental Attribute

아 이게 .NET 8이 아니라 C# 12의 기능 이였군요. Experimental 특성을 사용하여 구현하면 사용 시 실험적 기능이라는 컴파일 오류와 함께 주의 해서 사용할 것을 알려줍니다.

그럼에도 불구하고 사용하기를 원한다면 #pragma warning disable MING01 등을 이용해서 관련 오류를 무시할 수 있습니다.

2개의 좋아요

개인적으로 .net 8에서 가장 쓰고 싶었던 기능이 using type 입니다.

using Tuple = (int a, int b);

namespace ConsoleApp11;

internal class Program
{
    static void Main(string[] args)
    {
        Tuple tuple = new(1, 2);
        Console.WriteLine(tuple.a + "/" + tuple.b);
    }
}

이게 .net 7에서는 안되지만 8에 도입 되었습니다.

C++ 때 typedef 를 쓰던게 생각 나네요.

4개의 좋아요

컬렉션 표현식을 사용할 때 다음 처럼,

Span<int> list = [1, 2, 3, 4, 5];

Span으로 컬렉션을 생성할 경우 정말로 스택에 할당하는지 궁금해서 BenchmarkDotNet을 이용해 다음 처럼 구성한 후 확인해 보았습니다.

using BenchmarkDotNet.Attributes;
using BenchmarkDotNet.Jobs;

namespace Benchmark;

[SimpleJob(RuntimeMoniker.Net80)]
[RPlotExporter]
[MemoryDiagnoser]
public class CSharp12
{
    [Params(10000)]
    public int Count;

    [Benchmark]
    public void CollectionExpressionsArray()
    {
        for (var i = 0; i < Count; i++)
        {
            int[] list = [1, 2, 3, 4, 5];
            list[0] = 1;
        }
    }

    [Benchmark]
    public void CollectionExpressionsSpan()
    {
        for (var i = 0; i < Count; i++)
        {
            Span<int> list = [1, 2, 3, 4, 5];
            list[0] = 1;
        }
    }
}
| Method                     | Count | Mean      | Error     | StdDev    | Gen0    | Allocated |
|--------------------------- |------ |----------:|----------:|----------:|--------:|----------:|
| CollectionExpressionsArray | 10000 | 29.108 us | 0.5588 us | 0.5979 us | 38.2385 |  480000 B |
| CollectionExpressionsSpan  | 10000 |  8.099 us | 0.0180 us | 0.0160 us |       - |         - |

오, 정말로 스택에 할당되는군요.

5개의 좋아요

다음의 경로를 통해 C# 12에서 추가된 기능을 코드로 살펴볼 수 있습니다.

4개의 좋아요
3개의 좋아요
2개의 좋아요