【问题标题】:The modifier 'new' is not valid for this item修饰符“新”对此项目无效
【发布时间】:2015-09-21 09:10:57
【问题描述】:

我创建了一个类GroupPrincipalExtension : GroupPrincipal,正如你所见,它继承自System.DirectoryServices.AccountManagement.GroupPrincipal

现在,当我尝试在扩展类中创建构造函数时,

public new GroupPrincipalExtension()
{
    //do something
}

我收到此错误,

修饰符“new”对此项无效

根据我读到的内容,我们可以在派生类中添加自己的构造函数,带或不带'new'关键字

编辑

如果我删除新关键字:

'System.DirectoryServices.AccountManagement.GroupPrincipal' 没有 包含一个接受 0 个参数的构造函数

【问题讨论】:

    标签: c#


    【解决方案1】:

    从构造函数中删除new,它应该可以工作。您只在创建实例时声明 new 关键字。

    此外,由于它继承自另一个类,您可能希望像这样声明它:

    public GroupPrincipalExtension()
        : base() // Parameters ??
    {
        //do something
    }
    

    【讨论】:

    • 或限制在泛型声明中可能用作类型参数的参数的类型
    • 这些都与构造函数无关,为什么要提出来呢?
    • 因为你说:“你只在创建实例时声明new关键字。”,这显然是错误的。
    【解决方案2】:

    GroupPrincipal doesn't have a default constructor。它最纤细的构造函数是一个接受 PrincipalContext 的构造函数,这正是你需要在构造函数中作为参数的:

    public GroupPrincipalExtension(PrincipalContext context) : base(context)
    {
        //do something
    }
    

    【讨论】:

    • 这是否意味着,派生类不能有 0 个参数的构造函数 :S ?
    • 可以,但您需要将参数传递给基类构造函数,即: base(object)
    • 你仍然可以有一个空的构造函数,但你需要生成 PrincipalContext 并以某种方式将其传递给 base
    猜你喜欢
    • 2011-07-30
    • 1970-01-01
    • 2019-08-04
    • 2016-11-01
    • 2012-07-17
    • 2013-04-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多