제네릭도 별칭이 됩니다.
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 관련 글:
- 닷넷: 2144. C# 12 - 컬렉션 식(Collection Expressions) (sysnet.pe.kr)
- 닷넷: 2142. C# 12 - 인라인 배열(Inline Arrays) (sysnet.pe.kr)
- 닷넷: 2141. C# 12 - Interceptor (컴파일 시에 메서드 호출 재작성) (sysnet.pe.kr)
- .NET Framework: 2114. C# 12 - 모든 형식의 별칭(Using aliases for any type) (sysnet.pe.kr)
- .NET Framework: 2113. C# 12 - 기본 생성자(Primary Constructors) (sysnet.pe.kr)
- .NET Framework: 2112. C# 12 - 기본 람다 매개 변수 (sysnet.pe.kr)
3개의 좋아요
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개의 좋아요