I have read about partial methods in the latest C# language specification, so I understand the principles, but I’m wondering how people are actually using them. Is there a particular design pattern that benefits from partial methods?
Share
Sign Up to our social questions and Answers Engine to ask questions, answer people’s questions, and connect with other people.
Login to our social questions & Answers Engine to ask questions answer people’s questions & connect with other people.
Lost your password? Please enter your email address. You will receive a link and will create a new password via email.
Please briefly explain why you feel this question should be reported.
Please briefly explain why you feel this answer should be reported.
Please briefly explain why you feel this user should be reported.
Partial methods have been introduced for similar reasons to why partial classes were in .Net 2.
A partial class is one that can be split across multiple files – the compiler builds them all into one file as it runs.
The advantage for this is that Visual Studio can provide a graphical designer for part of the class while coders work on the other.
The most common example is the Form designer. Developers don’t want to be positioning buttons, input boxes, etc by hand most of the time.
#regionblockThis makes maintaining both much easier. Merges are simpler and there’s less risk of the VS form designer accidentally undoing coders’ manual changes.
In .Net 3.5 Linq has been introduced. Linq has a DBML designer for building your data structures, and that generates auto-code.
The extra bit here is that code needed to provide methods that developers might want to fill in.
As developers will extend these classes (with extra partial files) they couldn’t use abstract methods here.
The other issue is that most of the time these methods wont be called, and calling empty methods is a waste of time.
Empty methods are not optimised out.
So Linq generates empty partial methods. If you don’t create your own partial to complete them the C# compiler will just optimise them out.
So that it can do this partial methods always return void.
If you create a new Linq DBML file it will auto-generate a partial class, something like
Then in your own partial file you can extend this:
If you don’t extend these methods they get optimised right out.
Partial methods can’t be public – as then they’d have to be there for other classes to call. If you write your own code generators I can see them being useful, but otherwise they’re only really useful for the VS designer.
The example I mentioned before is one possibility:
Another potential use is if you had a large and complex class spilt across multiple files you might want partial references in the calling file. However I think in that case you should consider simplifying the class first.