Static Method of a Static Class vs. Static Method

2019-01-17 18:56发布

问题:

I was asked the above question in an interview. Could you please explain the differences? ( performance - memory - usage - when to use which ? )

Thank you,

Erkan

回答1:

Declaring a static class documents your intent for that class to be a collection of static functionality, and anyone adding instance members will get a compilation error.

A non-static class with static members usually indicates that the class is designed to be instantiated at some point. Static methods of these classes usually do one of two things:

  1. Provide a factory method for creating an instance of that type;
  2. Provide helper functionality that does not require an instance of the type;

Also, as mentioned already, extension methods can only be declared on a static class.



回答2:

I assume you were asked for the differences?

A static method on a static class can be used to define an extension method. A static method on a non-static class cannot.



回答3:

In terms of performance and memory usage; precisely nothing. Having a static class means you know there are no instances, but back in 1.1 having a private constructor sufficed. Use a static class if it simply makes no sense to have an instance! (utility classes etc)



回答4:

When you are providing utility functions and all your methods are static, I recommend you use static methods in a static class.

When you want to provide utility methods that just deal with your instance, I recommend you use static methods in a non-static class. For example:

var myClass = MyClass.Create();
var myClass = MyClass.Parse("serialized.MyClass");


回答5:

One major difference I faced when deciding whether to go with normal class with all static methods or, use a static class, is that a normal class supports interface implementation, where as static class does not. I use static class only when I am sure it will be a collection of static functions (usually helper functions), and will never be in the main stream of program. I promote interface programming, for dependency injections, unit testing etc. So, for main flow of program, I use normal class with static methods.