2011-04-20 136 views
5

有人請向我解釋下面的代碼行是什麼?這段代碼在做什麼?

dynamic shellApplication = Activator.CreateInstance(Type.GetTypeFromProgID("Shell.Application")); 

string path = System.IO.Path.GetDirectoryName(filePath); 
string fileName = System.IO.Path.GetFileName(filePath); 

dynamic directory = shellApplication.NameSpace(path); 
dynamic link = directory.ParseName(fileName); 

dynamic verbs = link.Verbs(); 

我已經搜索了msdn庫,但無法真正理解它做了什麼。

這不是完整的代碼,但我承認其餘部分,它只是我正在努力的這部分。

+0

目前還不清楚你在這裏問什麼。你在問代碼的目的是什麼,或者「動態」是如何工作的,或者是什麼?究竟是什麼讓你感到困惑? – 2011-04-20 21:49:23

+0

令我困惑的部分是:調用此代碼的目的是什麼以及它給您的最終結果是什麼?最終結果是動詞變量。代碼的第一行是什麼?什麼是「shell.application」? – SimplyZ 2011-04-20 21:57:23

+0

「shell.application」是您在此創建此對象的方式:http://msdn.microsoft.com/zh-cn/library/bb774094。 「動詞」成員記錄在這裏:http://msdn.microsoft.com/en-us/library/bb787850 – 2011-04-20 22:06:04

回答

4

看起來它正在檢索特定程序所關聯的shell操作。例如打開,打印,編輯等

打開註冊表編輯器,然後定位到HKEY_LOCAL_MACHINE \ SOFTWARE \ Classes下\文本文件

展開它,並期待在殼牌的關鍵。代碼應該返回類似的動詞。

+0

因此可以說代碼正在獲取.exe的操作,它是否也會包含「pin to task bar」操作? – SimplyZ 2011-04-20 21:41:31

+0

@Zrean Tofiq:不知道,但我的猜測是否定的。我相信Pin to Task Bar方法是在系統級定義的。 – NotMe 2011-04-20 21:43:08

+0

好的,謝謝,但它確實有針腳到任務欄的方法。我現在正在使用它,但我只是想看到我們在同一軌道上=) – SimplyZ 2011-04-20 21:45:28

4

這會創建"Shell.Application" COM對象,然後使用dynamic來調用它的方法。

它獲取可以在文件上調用的所有動詞。

這基本上是scripting。樣本請參見herehere

+1

你是指「可以在文件上調用的所有**動詞**」是什麼意思?什麼是這種情況下的動詞? – SimplyZ 2011-04-20 21:42:49

+0

沒有那個特定的文件。看到我提到的鏈接。 – Aliostad 2011-04-20 21:43:31

1

要擴展Aliostad的答案,C#中的dynamic關鍵字允許您調用未知類型的成員和方法。這意味着使用dynamic變量,您將無法獲得智能感知,因爲編譯器不知道變量實際上具有哪些成員或方法。這一切都是在運行時弄清楚的。

這裏是一個good explanation

+0

我對理解動態關鍵字沒有任何大問題。對我來說問題在於shell.application部分,我想知道動詞變量是什麼以及它來自哪裏。但無論如何,謝謝=) – SimplyZ 2011-04-20 21:51:45

+0

好的 - 你不清楚你問的是哪一部分。 – 2011-04-21 12:47:54