many questions are close, but none answers my problem...
How do I use reflection in C# 3.5 to get all classes which are static from an assembly. I already get all Types defined, but there is no IsStatic property. Counting 0 constructors is really slow and did not work either.
Any tips or a line of code? :-)
Chris
Here is how you get types from an assembly:
http://msdn.microsoft.com/en-us/library/system.reflection.assembly.aspx
GetTypes Method
Then:
Look for the classes that are abstract and sealed at the same time.
http://dotneteers.net/blogs/divedeeper/archive/2008/08/04/QueryingStaticClasses.aspx
From the comment below:
Static classes are a feature of C#, not the Common Language Specification, and so there's no one piece of metadata on a Type instance that would indicate that it's a static class. You can, however, check to see if it's a sealed type, and if all of its non-inherited members are static.
What C# calls a static class, is an abstract, sealed class to the CLR. So you'd need to look at IsAbstract && IsSealed.
You need to combine following checks: Abstract, Sealed, BeforeFieldInit. After static class compiles you can see following IL code in the compiled assembly: