dotnet / dotnet/csharplang

[Proposal]: Relaxed ordering for `partial` and `ref` modifiers

Open
#9,804 0 comments 0 reactions 1 assignee Claimed by @RikkiGibson View on GitHub
Proposal Proposal champion
Dominant language
C#
Stars
12.7k
Forks
1.1k
Avg merge
11h 1m
Merged PRs (30d)
3

Description

Specification: https://github.com/dotnet/csharplang/blob/main/proposals/relaxed-partial-ref-ordering.md
Discussion: #8965 (converted from previous champion issue #946)

## Summary
[summary]: #summary

Allow the `partial` modifier to appear in any position in a modifier list on a type or member declaration.
Allow the `ref` modifier to appear in any position in a modifier list on a struct declaration.

```cs
// All errors in this sample would be removed by adopting the proposal:
internal partial class C { }
partial internal class C { } // error

internal ref struct RS { }
ref internal struct RS { } // error

internal ref partial struct RS { }
internal partial ref struct RS { } // error
partial ref internal struct RS { } // error

partial class Program
{
public partial Program();
partial public Program() { } // error

public partial int Prop { get; set; }
partial public int Prop { get => field; set; } // error

public partial void Method();
partial public void Method() { } // error

partial public event Action Event; // error
public partial event Action Event { add { } remove { } }
}
```

## Design meetings
- https://github.com/dotnet/csharplang/blob/master/meetings/2017/LDM-2017-12-04.md
- https://github.com/dotnet/csharplang/blob/main/meetings/2020/LDM-2020-09-09.md#champion-relax-ordering-constraints-around-ref-and-partial-modifiers-on-type-declarations
- https://github.com/dotnet/csharplang/blob/main/meetings/2026/LDM-2026-01-12.md#relaxed-ordering-for-partial-and-ref-modifiers

Contributor guide

No contributing guide indexed for this repository

Assessment

This issue has not been assessed yet.

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.