Click here to Skip to main content
65,938 articles
CodeProject is changing. Read more.
Articles
(untagged)

Partial Methods - An Uncommon Note

0.00/5 (No votes)
27 Sep 2010 1  
A note about Partial methods

I think most people working in C# must know how Partial classes work. Partial classes allow you to divide your own class in one or more files but during runtime the files would be merged to produce a single coherent object. By this way, the classes could be made very small and also easily maintainable.

The most important part of a Partial class is with designers. While you work in Visual Studio, you must have found a portion of code that is generated automatically by the designer. Designers create a class which keeps on refreshing itself when certain modifications are made in the Designer itself. Partial classes allow you to create an alternate implementation of the same class so that the code you add to the class does not goes out when the Designer is refreshed.

Partial methods are another new addition to .NET languages that allow you to declare / define the same method more than once. Generally Microsoft introduced the concept of Partial method to deal with Designer generated code and to allow reserving the name of a method that one needed to be implemented later in original classes. By this way, the Designer will not produce any warning without implementing the actual method, but will allow future developers to implement or write their own logic on the same method that is defined.

C#
partial class MyPartialClass
{
    public void MyNormalMethod()
    {
        Console.WriteLine("Inside first Normal Method");
    }
    partial void MyPartialMethod(); 	//It is declared and will be 
				//defined later in another partial class
}

Let us suppose the MyPartialClass is generated by the designer. It declares the method MyPartialMethod which I have not defined yet.

C#
partial class MyPartialClass
{
    //public void MyNormalMethod()
    //{
    //    Console.WriteLine("Inside second Normal Method");
    //}
    partial void MyPartialMethod()
    {
        Console.WriteLine("Inside second Partial Method");
    }
}

In another implementation of MyPartialClass, I have defined the method MyPartialMethod which holds the actual implementation of the code. So if I create an object of MyPartialClass, it will hold both methods MyNormalMethod and MyPartialMethod and when it is called, it calls appropriately.

Another thing to note, the implementation of Partial method is not mandatory. If you do not define the partial method in another partial class, it will eventually be eliminated completely in runtime IL.

Limitations of a Partial Method

  1. Partial Method is by default private. Hence you can only call a partial method from within the partial class.

    C#
    partial class MyPartialClass
    {
        public void MyNormalMethod()
        {
            Console.WriteLine("Inside first Normal Method");
            this.MyPartialMethod();
        }
        partial void MyPartialMethod(); 	//It is declared and will be defined 
    				//later in another partial class
    }

    Thus even if you do not declare the method MyPartialMethod, you can even call it from within the class. During runtime, CLR will automatically call if it is implemented or will eliminate the call completely from the system.

  2. Partial method needed to be declared inside a Partial class. A partial class is only capable of redefining the part later in another file. So it is essential to mark the class as partial as well when it has a partial method.
  3. Cannot be marked as extern.
  4. Must have a void return type and also cannot use out parameter as argument.
  5. Partial method does not allow to write as virtual, sealed, new, override or extern.

Since partial method is created to generate methods in designer, most of the designers highly use partial methods. Even though it is very rarely used in real life, it would be worth it if you know about it.

For further reference:

Thank you for reading my post.

License

This article has no explicit license attached to it but may contain usage terms in the article text or the download files themselves. If in doubt please contact the author via the discussion board below.

A list of licenses authors might use can be found here