我正在尋找這兩個函數在asp.net/c#中的替代方案。在C#中等效的PHP function_exists/class_exists
if(function_exists('foo'))
{
$returned = foo($bar);
}
if(class_exists('foo'))
{
$fooclass = new foo($bar);
}
我正在尋找這兩個函數在asp.net/c#中的替代方案。在C#中等效的PHP function_exists/class_exists
if(function_exists('foo'))
{
$returned = foo($bar);
}
if(class_exists('foo'))
{
$fooclass = new foo($bar);
}
Assembly assembly = Assembly.LoadFile("assemblyAddress");
bool containClass = assembly.GetTypes().Where(x=>x.Name == "ClassName").Count() > 0;
bool containmethod = assembly.GetTypes().Where(
x => x.GetMethods().Count(p => p.Name == "MethodName") > 0).Count() > 0;
@David Lively,謝謝 – 2010-12-17 18:19:33
這段代碼可以用來檢查運行時是否需要編譯。我對嗎? – 2010-12-18 13:55:37
@PeachLabs,它可以在運行時使用,我不知道你在編譯時說什麼,運行前每個代碼都需要編譯。 – 2010-12-18 14:06:45
這樣的函數是不相關的,因爲C#是一種靜態語言。
如果這個類不存在,你會得到一個編譯時間錯誤。
您可能正在尋找反思。
我正在嘗試開發像wordpress這樣的插件框架,以便儘可能獲得最佳解決方案。 – 2010-12-18 13:56:44
這類事情不會從解釋和動態類型的世界轉化爲大量編譯和強類型的.NET世界。也就是說,還有其他方法可以實現,也許你可能想重申一下顯示你想創建什麼效果的問題。
C#中的所有函數都必須存在於一個類中,因此第一個示例不適用於全局函數的上下文中。
對於一類的情況下,你會知道在編譯的時候,如果它存在:
MyClass x = new MyClass();
會如果沒有定義MyClass
在編譯時返回。
如果你想獲得屬於MyClass的方法列表,你可以使用Reflection:
你到底想幹什麼? – SLaks 2010-12-17 17:19:47