2010-05-07 52 views
1

是否有可能使用部分結構來實現這樣的事情: 有下列定義一個asp.net頁面基類:是否有可能在C#中「繼承部分結構」?

public partial struct QuerystringKeys 
{ 
    public const string Username = "username"; 
    public const string CurrentUser = "currentUser"; 
} 

有一個asp.net頁面,從提到的基類繼承以上,延伸部分聲明:

public partial struct QuerystringKeys 
{ 
    /// <summary> 
    /// The page number of the review instances list 
    /// </summary> 
    public const string Page = "page"; 
} 

的最終目標是QuerystringKeys結構與現有的asp.net頁面中都定義了三個常量字符串。

回答

1

不,你不能那樣做。當你在討論ASP .NET頁面時,我假設你希望這個結構被包含在頁面類聲明中(如果沒有,爲什麼不把它放在單獨的代碼文件中)?

如果你的結構只是爲了保持常量字符串,使用一個類並繼承基地。因爲你不會創建它的實例,所以不會有任何區別:

public class Test : Page 
{ 
    internal class QuerystringKeys : BasePage.QuerystringKeys 
    {    
     public const string Page = "page"; 
    } 
} 

public class BasePage : Page 
{ 
    internal class QuerystringKeys 
    { 
     public const string Username = "username"; 
     public const string CurrentUser = "currentUser"; 
    } 
} 
+1

或*不*從基礎繼承 - 你沒有專門化任何東西,你只是指常量。這裏沒有要求繼承的要求。 – 2010-05-07 16:27:27

+0

比方說,我有三個深繼承: BasePageClass-> RefinedBasePageClass->頁。 我希望能夠來定義一組在他們每個人的常量字符串(查詢字符串鍵),並讓他們以某種方式提供給頁面爲常量字符串的一個集合。我仍然不確定如何解決這個問題。 – balazs 2010-05-07 16:31:04

+0

@Jon,雖然我同意這不是遺留問題需要解決的問題,但它可以解決所提出的問題。通過某種方式,您可以說您正在專門研究某些內容 - 查詢鍵常量的集合,這些常量應該可用於指定的頁面。 – driis 2010-05-07 16:51:00

3

我不這麼認爲。

我對部分類的理解是,所有在程序集中共享相同名稱的部分將嘗試進行組合。在你的情況下,它不會知道你是如何組合的,並且會有很多重複的名字。

你可以實現與抽象類類似的效果,雖然,雖然你需要一個不同的名稱/ scope類的每一頁

4

不能從結構,不斷繼承 - 和部分類型不反正繼承。他們只是將多個源文件合併爲一個類型。

我不知道ASP.NET頁面的細節,無論如何,但問題是,你不能在使用相同的「基地」類型,但與它相結合,形成不同類型的每個多個部分類型。聲明相同部分類型的多個源文件僅組合形成一個且只有一個類型。

看來你只是這樣做是爲了分享,雖然常數 - 這在我看來是一個貧窮的使用是部分類型或繼承。只需要有一個CommonQueryKeys靜態類並適當地引用它。

+0

@開發者藝術:我不能說我同意,我害怕。 – 2010-05-07 16:22:47

+0

謝謝約翰。這證實了我的猜測。我爲我的單詞選擇道歉。你是完全正確的,部分類型不會彼此繼承。但是,鑑於從基本頁面繼承的頁面和部分結構的使用,我不太確定如何標題。 – balazs 2010-05-07 16:23:36

+0

我不確定「代碼中的藝術表現」是什麼意思。 – balazs 2010-05-07 16:24:09