Pointless .Net Feature of the Day
-
Quote:
but any calls to the method are also removed.
Wouldn't that be disastrous if the method is intended to produce side-effects?
CPallini wrote:
Wouldn't that be disastrous if the method is intended to produce side-effects?
Where I used to work, that was an every day occurrence, both in the code and in the meetings with the managers.
Latest Article - A Concise Overview of Threads Learning to code with python is like learning to swim with those little arm floaties. It gives you undeserved confidence and will eventually drown you. - DangerBunny Artificial intelligence is the only remedy for natural stupidity. - CDP1802
-
It was heavily used in Entity Framework DB First. I've used them a lot to extend generated classes with my own code. I've never used it for my own classes or outside of generated code.
Best, Sander sanderrossel.com Continuous Integration, Delivery, and Deployment arrgh.js - Bringing LINQ to JavaScript Object-Oriented Programming in C# Succinctly
Sander Rossel wrote:
It was heavily used in Entity Framework DB First.
Ah. That explains it. They made a language enhancement to support a bad design to begin with! ;)
Latest Article - A Concise Overview of Threads Learning to code with python is like learning to swim with those little arm floaties. It gives you undeserved confidence and will eventually drown you. - DangerBunny Artificial intelligence is the only remedy for natural stupidity. - CDP1802
-
CPallini wrote:
Wouldn't that be disastrous if the method is intended to produce side-effects?
Where I used to work, that was an every day occurrence, both in the code and in the meetings with the managers.
Latest Article - A Concise Overview of Threads Learning to code with python is like learning to swim with those little arm floaties. It gives you undeserved confidence and will eventually drown you. - DangerBunny Artificial intelligence is the only remedy for natural stupidity. - CDP1802
-
Of course, you could always simplify that to:
using System;
using System.Diagnostics;namespace ConditionalMethodTest
{
class Foo
{
[Conditional("LOGGING")]
private void Log(string msg)
{
Console.WriteLine(msg);
}public void DoSomething() { Log("Fizbin"); } } static class Program { static void Main() { new Foo().DoSomething(); } }
}
for exactly the same effect. :) ConditionalAttribute Class (System.Diagnostics) | Microsoft Docs[^]
"These people looked deep within my soul and assigned me a number based on the order in which I joined." - Homer
Richard Deeming wrote:
for exactly the same effect.
Yes, but that's not nearly as confusing!
Latest Article - A Concise Overview of Threads Learning to code with python is like learning to swim with those little arm floaties. It gives you undeserved confidence and will eventually drown you. - DangerBunny Artificial intelligence is the only remedy for natural stupidity. - CDP1802
-
Partial methods. I'll let you do your own research, but I cannot identify a single case where the use of a partial method would be beneficial, desired, or warranted.
".45 ACP - because shooting twice is just silly" - JSOP, 2010
-----
You can never have too much ammo - unless you're swimming, or on fire. - JSOP, 2010
-----
When you pry the gun from my cold dead hands, be careful - the barrel will be very hot. - JSOP, 2013Remove partial method, you just broke all WPF user controls! :((
A new .NET Serializer All in one Menu-Ribbon Bar Taking over the world since 1371!
-
Partial methods. I'll let you do your own research, but I cannot identify a single case where the use of a partial method would be beneficial, desired, or warranted.
".45 ACP - because shooting twice is just silly" - JSOP, 2010
-----
You can never have too much ammo - unless you're swimming, or on fire. - JSOP, 2010
-----
When you pry the gun from my cold dead hands, be careful - the barrel will be very hot. - JSOP, 2013I thought this too. What the hell use are partial methods. The only reasonable use I have found for them is when using Xamarin to build an app. You may have a class defined in both the iOS and Android projects and defining a partial class makes sense.
"There are two ways of constructing a software design: One way is to make it so simple that there are obviously no deficiencies, and the other way is to make it so complicated that there are no obvious deficiencies. The first method is far more difficult." - C.A.R. Hoare Home | LinkedIn | Google+ | Twitter
-
Partial methods. I'll let you do your own research, but I cannot identify a single case where the use of a partial method would be beneficial, desired, or warranted.
".45 ACP - because shooting twice is just silly" - JSOP, 2010
-----
You can never have too much ammo - unless you're swimming, or on fire. - JSOP, 2010
-----
When you pry the gun from my cold dead hands, be careful - the barrel will be very hot. - JSOP, 2013When I learned about partial functions, I immediately embraced it. My project at that time was a protocol stack, with data transport, control and management planes. Each plane is a set of functions completely separated from the other two, but operating on the same protocol layer entity. Partial fuctions allowed me to keep the implementation of the planes completely independent of each other. Obviously, very plane specific functions didn't make use of partial functions, but for e.g. initialization and cleanup it was great. Once you get going with partial functions, you add e.g. logging functions without cluttering up the plain code. When you write test functions, you write a partial function to verify entry and/or exit conditions. In the development phase, you add extensive parameter validation that would be too expensive to run in production code, or you add code for performance measurenment and statitics to detect bottlenecks and excessive resource reuqirements, so they can be fixed before the product is released. Yes, you can put it all into one huge, messy code file with a lot of #ifdef to disable parts of the code. The programmer responsisible for one of the planes will have to wade through lots of code that is ireelevant to his tasks. An update in any of the planes, the log functions, the performance measurement functions, the test and validation functions,... invalidates the source file of every other programmer on the project. Obviously it can be done that way. But I love the partial functions, considering that to be a much better way to do it.
-
I thought this too. What the hell use are partial methods. The only reasonable use I have found for them is when using Xamarin to build an app. You may have a class defined in both the iOS and Android projects and defining a partial class makes sense.
"There are two ways of constructing a software design: One way is to make it so simple that there are obviously no deficiencies, and the other way is to make it so complicated that there are no obvious deficiencies. The first method is far more difficult." - C.A.R. Hoare Home | LinkedIn | Google+ | Twitter
I'm not saying partial classes aren't reasonable (hell, I use partial classes), I'm saying partial METHODS aren't.
".45 ACP - because shooting twice is just silly" - JSOP, 2010
-----
You can never have too much ammo - unless you're swimming, or on fire. - JSOP, 2010
-----
When you pry the gun from my cold dead hands, be careful - the barrel will be very hot. - JSOP, 2013 -
I'm not saying partial classes aren't reasonable (hell, I use partial classes), I'm saying partial METHODS aren't.
".45 ACP - because shooting twice is just silly" - JSOP, 2010
-----
You can never have too much ammo - unless you're swimming, or on fire. - JSOP, 2010
-----
When you pry the gun from my cold dead hands, be careful - the barrel will be very hot. - JSOP, 2013I can't think of a single use for a partial method either.
"There are two ways of constructing a software design: One way is to make it so simple that there are obviously no deficiencies, and the other way is to make it so complicated that there are no obvious deficiencies. The first method is far more difficult." - C.A.R. Hoare Home | LinkedIn | Google+ | Twitter
-
Partial methods. I'll let you do your own research, but I cannot identify a single case where the use of a partial method would be beneficial, desired, or warranted.
".45 ACP - because shooting twice is just silly" - JSOP, 2010
-----
You can never have too much ammo - unless you're swimming, or on fire. - JSOP, 2010
-----
When you pry the gun from my cold dead hands, be careful - the barrel will be very hot. - JSOP, 2013I do not agree. We have a number of WCF/SOAP projects where we generate code from wsdl and same thing with XML generating code from XSD. I both cases it is beneficial to have additional methods or properties in a separate file. When XSD or WSDL is updated you code is not overwritten during regeneration.
-
Sander Rossel wrote:
It was heavily used in Entity Framework DB First.
Ah. That explains it. They made a language enhancement to support a bad design to begin with! ;)
Latest Article - A Concise Overview of Threads Learning to code with python is like learning to swim with those little arm floaties. It gives you undeserved confidence and will eventually drown you. - DangerBunny Artificial intelligence is the only remedy for natural stupidity. - CDP1802
Marc Clifton wrote:
They made a language enhancement to support a bad design to begin with!
That's truth in advertising right there... :)
".45 ACP - because shooting twice is just silly" - JSOP, 2010
-----
You can never have too much ammo - unless you're swimming, or on fire. - JSOP, 2010
-----
When you pry the gun from my cold dead hands, be careful - the barrel will be very hot. - JSOP, 2013 -
I do not agree. We have a number of WCF/SOAP projects where we generate code from wsdl and same thing with XML generating code from XSD. I both cases it is beneficial to have additional methods or properties in a separate file. When XSD or WSDL is updated you code is not overwritten during regeneration.
Once again, this discussion isn't about partial classes - it's about partial METHODS.
".45 ACP - because shooting twice is just silly" - JSOP, 2010
-----
You can never have too much ammo - unless you're swimming, or on fire. - JSOP, 2010
-----
When you pry the gun from my cold dead hands, be careful - the barrel will be very hot. - JSOP, 2013 -
Partial methods. I'll let you do your own research, but I cannot identify a single case where the use of a partial method would be beneficial, desired, or warranted.
".45 ACP - because shooting twice is just silly" - JSOP, 2010
-----
You can never have too much ammo - unless you're swimming, or on fire. - JSOP, 2010
-----
When you pry the gun from my cold dead hands, be careful - the barrel will be very hot. - JSOP, 2013No Research needed. It's for extending generated Code that may will be re-generated later (so you can not change it because your changes would be overriden). E.g. I use it to extend EF generated Contexts. It's a very nice feature and .NET has many not everyone will use, so don't. But if you do Frameworks or template-code or big systems (or WindowsForms UI) it's very handy…
-
Where is YAGNI when you need it. Google trends[^] results sort of agree with your feelings, as do I.
Definitely YAGNI. Will definitely be asked about it in a job interview.
-
The cool thing in the code below is that if you don't define LOGGING, not only does the partial method go away, but any calls to the method are also removed.
#define LOGGING
using System;
namespace PartialMethodTest
{
partial class Foo
{
partial void Log(string msg);public void DoSomething() { Log("Fizbin"); } }
#if LOGGING
partial class Foo
{
partial void Log(string msg)
{
Console.WriteLine(msg);
}
}
#endifclass Program { static void Main(string\[\] args) { new Foo().DoSomething(); } }
}
Latest Article - A Concise Overview of Threads Learning to code with python is like learning to swim with those little arm floaties. It gives you undeserved confidence and will eventually drown you. - DangerBunny Artificial intelligence is the only remedy for natural stupidity. - CDP1802
-
No Research needed. It's for extending generated Code that may will be re-generated later (so you can not change it because your changes would be overriden). E.g. I use it to extend EF generated Contexts. It's a very nice feature and .NET has many not everyone will use, so don't. But if you do Frameworks or template-code or big systems (or WindowsForms UI) it's very handy…
-
It's for use in a
partial class
, so you could declare the partial method in the designer code for a WinForms app for example, and implement it in the user defined code for the same class. The difference is that the method can be called from the designer code because it will compile cleanly. This is still the case if the implementation of the partial method is never provided: the compiler will remove the partial method and the call to it if the concrete version is not written, and you still won't get a compiler error. Think of it as a sort-of optional private abstract method and you're about there.Sent from my Amstrad PC 1640 Never throw anything away, Griff Bad command or file name. Bad, bad command! Sit! Stay! Staaaay... AntiTwitter: @DalekDave is now a follower!
I use it frequently. I find it simpler to use than Interface.
__________________ Lord, grant me the serenity to accept that there are some things I just can’t keep up with, the determination to keep up with the things I must keep up with, and the wisdom to find a good RSS feed from someone who keeps up with what I’d like to, but just don’t have the damn bandwidth to handle right now. © 2009, Rex Hammock