C# Partial

Partial keyword

Partial classes span multiple files. How can you use the partial modifier on a C# class declaration? With partial, you can physically separate a class into multiple files. This is often done by code generators.

Keywords

Example

With normal C# classes, you cannot declare a class in two separate files in the same project. But with the partial modifier, you can. This is useful if one file is commonly edited and the other is machine-generated or rarely edited.

Program that uses partial class: C#

class Program
{
    static void Main()
    {
	A.A1();
	A.A2();
    }
}

Contents of file A1.cs: C#

using System;

partial class A
{
    public static void A1()
    {
	Console.WriteLine("A1");
    }
}

Contents of file A2.cs: C#

using System;

partial class A
{
    public static void A2()
    {
	Console.WriteLine("A2");
    }
}

Output

A1
A2

Partial is required here. If you remove the partial modifier, you will get an error containing this text: [The namespace '<global namespace>' already contains a definition for 'A'].

Namespace

Tip:To fix this, you can either use the partial keyword, or change one of the class names.

Compiler

Framework: NET

How does the C# compiler deal with partial classes? If you disassemble the above program, you will see that the files A1.cs and A2.cs are eliminated. You will find that the class A is present.

IL Disassembler

So:Class A will contain the methods A1 and A2 in the same code block. The two classes were merged into one.

Class

Tip:Partial classes are precisely equivalent to a single class with all the members.

Compiled result of A1.cs and A2.cs: C#

internal class A
{
    // Methods
    public static void A1()
    {
	Console.WriteLine("A1");
    }

    public static void A2()
    {
	Console.WriteLine("A2");
    }
}

Summary

C# programming language

Partial classes can simplify certain C# programming situations. They are often used in Visual Studio when creating Windows Forms programs. The machine-generated C# code is separate.

Note:Partial classes are sometimes used to separate commonly-edited code from rarely-edited code.

And:This can reduce confusion and the possibility that code that isn't supposed to be edited is changed.


C#: Class