C# 13 - (8) 부분 메서드 정의를 속성 및 인덱서에도 확대
partial 예약어의 지원이,
- C# 2.0 - partial 클래스 지원
- C# 3.0 - partial 메서드 지원
- C# 9.0 - partial 메서드 개선 (반환 타입 허용, out 매개변수 허용, 접근 제한자 허용)
속성(property) 및 인덱서(indexer)에도 적용이 가능해졌습니다.
More partial members
; https://learn.microsoft.com/en-us/dotnet/csharp/whats-new/csharp-13#more-partial-members
Partial properties ([Proposal]: Partial properties (VS 17.11, .NET 9) #6420)
; https://github.com/dotnet/csharplang/issues/6420
아래는 이에 대한 사용 예를 보여줍니다.
namespace ConsoleApp1;
internal class Program
{
    static void Main(string[] args)
    {
        Device device = new Device { Name = "Device 1" };
        Hub hub = new Hub();
        hub[0] = device;
        Console.WriteLine(hub[0].Name); 
    }
}
public partial class Device
{
    string _name = "";
    public partial string Name { get; set; } // partial 속성 선언
}
public partial class Device
{
    public partial string Name // partial 속성 정의
    {
        get => _name;
        set => _name = value;
    }
}
public partial class Hub
{
    Device[] _devices = new Device[10];
    public partial Device this[int index] { get; set; } // partial 인덱서 선언
}
public partial class Hub
{
    public partial Device this[int index] // partial 인덱서 구현
    {
        get => _devices[index];
        set => _devices[index] = value;
    }
}
일반적으로는 이런 식으로 굳이 선언과 구현할 나눌 필요는 없을 것입니다. 하지만 역시나 
자동 소스코드 생성기에서는 유용할 텐데요, 실제로 
이슈에 실린 소스코드를 보면,
// UserCode.cs
public partial class ViewModel : INotifyPropertyChanged
{
    public event PropertyChangedEventHandler PropertyChanged;
    [NotifyPropertyChanged]
    public partial string UserName { get; set; }
}
// Generated.cs
public partial class ViewModel
{
    private string __generated_userName;
    public partial string UserName
    {
        get => __generated_userName;
        set
        {
            if (value != __generated_userName)
            {
                __generated_userName = value;
                PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(nameof(UserName)));
            }
        }
    }
}
저렇게 partial class 내에 NotifyPropertyChanged 특성을 적용한 partial 속성이라면 자동 소스코드 생성기가 관여해 MVVM 패턴을 위한 코드를 쉽게 추가할 수 있을 것입니다.
[이 글에 대해서 여러분들과 의견을 공유하고 싶습니다. 틀리거나 미흡한 부분 또는 의문 사항이 있으시면 언제든 댓글 남겨주십시오.]