Partial Classes
The partial keyword allows the class, struct, or interface to span across multiple files. Typically, a class
will reside entirely in a single file. However, in situations where multiple developers need access to the
same class, or more likely in the situation where a code generator of some type is generating part of a
class, then having the class in multiple files can be beneficial.
The way that the partial keyword is used is to simply place partial before class, struct , or
interface . In the following example the class TheBigClass resides in two separate source files,
BigClassPart1.cs and BigClassPart2.cs :
//BigClassPart1.cs
partial class TheBigClass
{
public void MethodOne()
{
}
}
//BigClassPart2.cs
partial class TheBigClass
{
public void MethodTwo()
{
}
}
When the project that these two source files are part of is compiled, a single type called TheBigClass
will be created with two methods, MethodOne() and MethodTwo() .
If any of the following keywords are used in describing the class, the same must apply to all partials of
the same type:
· public
· private
· protected
· internal
· abstract
· sealed
· new
· generic constraints
Nested partials are allowed as long as the partial keyword precedes the class keyword in the nested
type. Attributes, XML comments, interfaces, generic - type parameter attributes, and members will be
combined when the partial types are compiled into the type. Given the two source files:
//BigClassPart1.cs
[CustomAttribute]
partial class TheBigClass : TheBigBaseClass, IBigClass
{
public void MethodOne()
{
}
}
//BigClassPart2.cs
[AnotherAttribute]
partial class TheBigClass : IOtherBigClass
{
public void MethodTwo()
{
}
}
After the compile, the equivalent source file would be:
[CustomAttribute]
[AnotherAttribute]
partial class TheBigClass : TheBigBaseClass, IBigClass, IOtherBigClass
{
public void MethodOne()
{
}
public void MethodTwo()
{
}
}