Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Use reflection to get a list of static classes

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

like image 672
Christian Ruppert Avatar asked Apr 14 '10 17:04

Christian Ruppert


1 Answers

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

Searching in blogs I could find the information that .NET CLR does not know the idea of static classes, however allows using the abstract and sealed type flags simultaneously. These flags are also used by the CLR to optimize its behavior, for example the sealed flag is used call virtual methods of sealed class like non-virtuals. So, to ask if a type is static or not, you can use this method:

From the comment below:

IEnumerable<Type> types = typeof(Foo).Assembly.GetTypes().Where
(t => t.IsClass && t.IsSealed && t.IsAbstract);
like image 183
kemiller2002 Avatar answered Nov 15 '22 21:11

kemiller2002