2010-05-07 86 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