2010-10-08 50 views
3
var types=from m in System.Reflection.Assembly.Load("System").GetTypes() 
        where m.IsClass 
        where // something to check whether or not the type is a static class. 
        select m; 

我想從我的結果中填充任何靜態類。如何測試給定類型是否是靜態類?

+0

這不會幫助你:http://stackoverflow.com/questions/ 1175888 /確定 - 如果類型是靜態的? – Patko 2010-10-08 06:20:41

回答

6
var types = from m in System.Reflection.Assembly.Load("System").GetTypes() 
      where m.IsClass && m.IsAbstract && m.IsSealed 
      select m; 

this thread

編輯:檢查m.IsSealed

1

你需要檢查,如果類是密封和摘要。
CLR不知道靜態類,但它確實支持密封的抽象類,即使你不能明確地編譯它們,靜態類也會被編譯爲密封的抽象類。

2

無論你做什麼都將基於啓發式 - 在IL級沒有具體的「這個類是靜態的」。對於C#和VB編譯器如何在未來版本中實現靜態/模塊並不能保證。

好,靜態類將沒有公共的構造函數,並且將被密封,所以下面可能是不夠的:

var types=from m in System.Reflection.Assembly.GetExecutingAssembly().GetTypes() 
       where m.IsClass && (!m.IsSealed || m.GetConstructors().Any()) 
       select m; 
相關問題