是否可以在c#中使用“继承的部分结构”?

时间:2010-05-07 16:14:24

标签: c# asp.net

是否可以使用部分结构来实现这样的结果: 有一个asp.net页面基类,定义如下:

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页面。

3 个答案:

答案 0 :(得分:4)

您无法从结构中继承 - 并且部分类型无论如何都不会继承。它们只是多个源文件组合在一起创建一个类型。

我还不知道ASP.NET页面的细节,但重点是你不能有多个部分类型,每个部分类型使用相同的“基础”类型,但与它结合形成不同的类型。声明相同部分类型的多个源文件只需组合成一个一个,只有一种类型。

看起来你只是这样做来分享常量 - 这让我感到很难使用部分类型或继承。只需要一个CommonQueryKeys静态类并适当地引用它。

答案 1 :(得分:3)

我不相信。

我对部分类的理解是,将尝试组合在程序集中共享相同名称的所有部分。在你的情况下,它不会知道你如何组合,并且会有很多重复的名字。

虽然您需要为每个页面使用不同的名称/范围类,但您可以使用抽象类实现类似的效果

答案 2 :(得分: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";
    }
}