Visual Studio包含一個名爲「Extract Interface」的重構函數,該函數根據類實現生成一個接口。爲什麼「Extracted Interfaces」是內部的而不是公共的?
提取的接口默認爲「內部」。問題是,我們最終將其幾乎全部改爲Public
。
有沒有人知道它爲什麼默認爲內部?更好的是,有沒有辦法將這個設置爲默認爲Public
?
Visual Studio包含一個名爲「Extract Interface」的重構函數,該函數根據類實現生成一個接口。爲什麼「Extracted Interfaces」是內部的而不是公共的?
提取的接口默認爲「內部」。問題是,我們最終將其幾乎全部改爲Public
。
有沒有人知道它爲什麼默認爲內部?更好的是,有沒有辦法將這個設置爲默認爲Public
?
它可能工作,如果您更改接口的Visual Studio模板(我還沒有嘗試,但假設這應該工作)。
對於Visual Studio 2008模板存儲在
"C:\Program Files\Microsoft Visual Studio 9.0\Common7\IDE\ItemTemplates
\CSharp\Code\1033\Interface.zip"
這在更詳細地描述this answer。
我沒有參考,但我有一個猜測,爲什麼它是默認的內部。假設您有3個項目/程序集:log4net(第三方API),MyApp.Util和MyApp.Web(Web項目)。 Web引用Util,它引用了log4net。網絡不是引用log4net,你想保持它的方式。
DAL內部,假設您有一個內部類,並且其中一個成員引用了在log4net中定義的類型。它可能是方法的返回類型或參數類型之一,或屬性的類型。
假設你從上述類中提取一個接口,包括前面提到的引用log4net的成員。那麼,如果您將該成員公開(公共接口的一部分)並引用實現它的類型,則您需要要求 Web項目引用log4net。
通過內部接口,Web可能會繼續對log4net無知。
你有沒有試過這個?這就是爲什麼你標記了答案CW? – 2010-07-07 00:58:39
@John - 我已經_basically_嘗試過這個我現在看一個例子,其中Web引用DAL引用NHibernate ,但Web不會t引用(並且不能使用)NHibernate。如果Web引用,例如實現NHibernate.ISession的類型,那麼它將不再構建,因爲它需要NHibernate引用。也就是說,如果您將現有類型的實現設置爲公共接口,那麼您可能會在某處破壞構建,因爲C#中的所有繼承(.NET?)都是公共的。 – apollodude217 2010-07-07 21:32:58
@John - 我將它標記爲CW,以便爲動機提供更權威的答案,所以其他人可以編輯正確性。這是一個壞主意嗎? :(注意自我:RTM。 – apollodude217 2010-07-07 21:34:43
這適用於更改新的接口,類等,但不適用於更改重構工具的「Extract Interface」函數的輸出。 :(謝謝,雖然 – 2010-06-11 18:06:55
@Rox Wen:好的,我明白了另一件讓我想起來的事情:VS也有一個用於創建新接口的內置代碼片段,也許這個被使用,你可以修改它?對於那個是在「C:\ Program Files文件(x86)\ Microsoft Visual Studio 10.0 \ VC#\ Snippets \ 1033 \ Visual C#\ interface.snippet」下的某個地方。 – 2010-06-11 20:45:07
@ 0xA3不,剛剛嘗試過這段代碼。你可能想到其他地方嗎? – Heliac 2013-11-08 10:47:06