Click here to Skip to main content
12,072,392 members (57,722 online)
Click here to Skip to main content
Add your own
alternative version

Tagged as

Stats

13.7K views
7 bookmarked
Posted

Partial Methods - An Uncommon Note

, 27 Sep 2010 CPOL
Rate this:
Please Sign up or sign in to vote.
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.

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.

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.

    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, along with any associated source code and files, is licensed under The Code Project Open License (CPOL)

Share

About the Author

Abhishek Sur
Architect
India India
Did you like his post?

Oh, lets go a bit further to know him better.
Visit his Website : www.abhisheksur.com to know more about Abhishek.

Abhishek also authored a book on .NET 4.5 Features and recommends you to read it, you will learn a lot from it.
http://bit.ly/EXPERTCookBook

Basically he is from India, who loves to explore the .NET world. He loves to code and in his leisure you always find him talking about technical stuffs.

Presently he is working in WPF, a new foundation to UI development, but mostly he likes to work on architecture and business classes. ASP.NET is one of his strength as well.
Have any problem? Write to him in his Forum.

You can also mail him directly to abhi2434@yahoo.com

Want a Coder like him for your project?
Drop him a mail to contact@abhisheksur.com

Visit His Blog

Dotnet Tricks and Tips



Dont forget to vote or share your comments about his Writing

You may also be interested in...

Comments and Discussions

 
GeneralMy vote of 3 Pin
Trellium6-Oct-10 14:32
memberTrellium6-Oct-10 14:32 
GeneralMy vote of 5 Pin
Yury Goltsman5-Oct-10 11:50
memberYury Goltsman5-Oct-10 11:50 
GeneralPartial methods in practice.... Pin
Member 18317605-Oct-10 11:27
memberMember 18317605-Oct-10 11:27 
GeneralMy vote of 3 Pin
EngleA5-Oct-10 6:16
memberEngleA5-Oct-10 6:16 
GeneralMy vote of 3 Pin
774655-Oct-10 5:05
member774655-Oct-10 5:05 
GeneralMy vote of 4 Pin
JHAx864-Oct-10 17:12
memberJHAx864-Oct-10 17:12 
GeneralMy vote of 2 Pin
Crawfis4-Oct-10 13:56
memberCrawfis4-Oct-10 13:56 
GeneralNice article Pin
Crawfis4-Oct-10 13:55
memberCrawfis4-Oct-10 13:55 

General General    News News    Suggestion Suggestion    Question Question    Bug Bug    Answer Answer    Joke Joke    Praise Praise    Rant Rant    Admin Admin   

Use Ctrl+Left/Right to switch messages, Ctrl+Up/Down to switch threads, Ctrl+Shift+Left/Right to switch pages.

| Advertise | Privacy | Terms of Use | Mobile
Web04 | 2.8.160208.1 | Last Updated 27 Sep 2010
Article Copyright 2010 by Abhishek Sur
Everything else Copyright © CodeProject, 1999-2016
Layout: fixed | fluid