2008-09-26 40 views
3

我可以從另一個.net命名空間公開類作爲我的命名空間中的類嗎?我使用類 - antlr.collections.AST - 作爲屬於我的命名空間中的類的函數的返回類型;因此,用戶必須在其文件頂部有我可以從另一個.net命名空間公開一個類作爲我的命名空間中的類嗎?

using antlr.collections; 
using myNamespace; 

以便使用我的功能。我可以myNamespace.AST一個別名antlr.collections.AST,使得用戶只需要具有

using myNamespace; 

在他們的文件的頂部?

回答

4

記住,你的代碼的消費者不會真正需要 using語句有。那些是爲了讓他們的生活更輕鬆,所以他們不必輸入antlr.collections.Foo和antlr.collections.Bar。

更大的「影響」(如果確實有確實是一個嚴重的一個)是你的代碼的消費者將需要一個硬引用到antlr.collections定義的組件。

但是,如果這是記錄在前面,我真的不認爲這是什麼大問題的。它與SubSonic生成的DAL的消費者沒有什麼不同,它需要同時參考生成的DAL程序集和原始SubSonic程序集。 (而且,很可能的話,使用的語句也是如此。)

相關性是它們是什麼。有一個原因導致類被分解成命名空間 - 主要是爲了組織和減少命名衝突。不知道你提到的命名空間中有哪些類,我不知道在你的場景中這種衝突實際上有多可能......但試圖將類從一個命名空間移動到另一個命名空間,或者隱藏需要這樣的事實通過從中得出一個空白類,可能不是最好的想法。它不會殺死你的班級的消費者以獲得另一個參考和使用聲明。

2

如何在新的命名空間中使用相同的名稱來派生類?我的意思是:

namespace MyForms { 
    class Class1 : Some.Other.Namespace.Class1 { 
     // ... 
    } 
} 
+0

這樣做可行,但除非原始海報擴展他的需求,否則可能無法解決他的任何問題。如果你做* *測試,那麼它不一定會看起來不錯。 – 2008-09-26 12:20:43

+0

不應該對派生類實例進行'是'測試嗎?我沒有做太多的C#;只是猜測它會起作用。 – 2008-09-29 06:45:30

1

不,你不行。

類的完整路徑和名稱是其身份的一部分。

2

創建一個在您的新名稱空間中繼承該類的新類。這並不理想,但對單元測試等很有用。

你應該想想爲什麼你雖然這樣做,類分成命名空間的一個原因。

1

如果從類派生,並返回你的派生類,你會讓自己負責提供所有的文檔返回類型。

我想你會做誰使用你的庫幫倒忙,因爲他們不一定知道他們真正有工作是從antir.collections(不,我知道那是什麼類型的開發者,但這不是重點)。如果開發人員來到StackOverflow.com搜索該返回類型的信息,他們更可能找到信息,如果該類型來自「普通」庫或來自您的?

1

唯一的解決方案是隱藏整個依賴到類型antlr.collections.AST。

您可以使用Adapter那個目的。

相關問題