Introduction

C## 8 (and above) has some restrictions regarding partial methods. For example :

  • Partial methods must have a void return type
  • Partial methods can’t have out parameters
  • Partial methods can’t have any accessibility keyword (public, private, protected etc….)

C## 9 aims to remove these restrictions. If you want to learn more about the motivation behind this, you can find a good description on the Github page here: https://github.com/jaredpar/csharplang/blob/partial/proposals/extending-partial-methods.md

Behavior before C## 9

Below are some examples of what happens when a partial methods has or not an accessibility keyword, has or not an out parameter, a void or not return type, implements an interface:

partial class MyService : IMyService
	{
	      partial void MyFirstFunction(); // Ok
	      private partial void MySecondFunction(); // CS0750 A partial method cannot have access modifiers or the virtual, abstract, override, new, sealed, or extern modifiers
	      private partial void MyThirdFunction(); // CS0750 A partial method cannot have access modifiers or the virtual, abstract, override, new, sealed, or extern modifiers
	      private partial object MyFourthFunction(); // CS0750 A partial method cannot have access modifiers or the virtual, abstract, override, new, sealed, or extern modifiers + CS0766 Partial methods must have a void return type
	      private partial object MyFifthFunction(); // CS0750 A partial method cannot have access modifiers or the virtual, abstract, override, new, sealed, or extern modifiers + CS0766 Partial methods must have a void return type
	      private partial void MySixthFunction(out int result); // CS0750 A partial method cannot have access modifiers or the virtual, abstract, override, new, sealed, or extern modifiers + CS0752 A partial method cannot have out parameters
	      public partial void MySeventhFunction(); // CS0750 A partial method cannot have access modifiers or the virtual, abstract, override, new, sealed, or extern modifiers
	}

	partial class MyService
	{
	      private partial void MyThirdFunction() { } // CS0750 A partial method cannot have access modifiers or the virtual, abstract, override, new, sealed, or extern modifiers
	      private partial object MyFifthFunction() { return new { }; } // CS0750 A partial method cannot have access modifiers or the virtual, abstract, override, new, sealed, or extern modifiers + CS0766 Partial methods must have a void return type
	}

	public interface IMyService
	{
	      void MySeventhFunction();
	}

#c# #.net 5 #c#9 #extending partial methods #programming-c #csharp

Introducing C# 9: Extending Partial Methods
4.50 GEEK