什么是可访问性不一致的错误?(What is inconsistent accessibility

2019-10-17 15:48发布

我使用自定义角色提供者,我做了一个CustomRoleProvider类并采取了一些RoleProvider在它的方法,这样

 public class CustomRoleProvider: RoleProvider
 {
 public override void CreateRole(string roleName)
    {
        throw new NotImplementedException();
    }

    public override bool DeleteRole(string roleName, bool throwOnPopulatedRole)
    {
        throw new NotImplementedException();
    }
  }

所有的方法都是public.but它显示错误

错误4-访问性不一致:基类的RoleProviderExample.RoleProvider'比少类可访问的“RoleProviderExample.CustomRoleProvider”。

我哪里做错了吗?

Answer 1:

基类RoleProvider ,你是通过暴露CustomeRoleProviderpublic

如果声明RoleProviderpublic错误将消失。 你不必给RoleProvider一个public构造函数。


另外,您可以的无障碍环境减少CustomRoleProvider到的RoleProvider 。 这可能是最合适的答案,你需要公开CustomRoleProvider大会之外?


如果RoleProvider是一个接口,那么,按照惯例,它被错误命名,你可以将其重命名以IRoleProvider 。 在任何情况下,仍不入店然后CustomRoleProvider

让公众这样,

public interface IRoleProvider
{
    void CreateRole(string roleName);

    bool DeleteRole(string roleName, bool throwOnPopulatedRole);
}

如果没有指定的无障碍环境interfaceclassstructinternal是隐含的。

interface成员总是publicclassstruct成员是private ,除非指定。

这是指定,除了在界面构件,其始终的情况下很好的做法public

你的实现可能看起来像这样,将override关键字应该不能用于接口实现,除非它们被覆盖可重写的基类的实现。

public class CustomRoleProvider : IRoleProvider
{
    public void CreateRole(string roleName)
    {
        throw new NotImplementedException();
    }

    public bool DeleteRole(string roleName, bool throwOnPopulatedRole)
    {
        throw new NotImplementedException();
    }
}

如果你想明确地实现接口,

public class CustomRoleProvider : IRoleProvider
{
    public void IRoleProvider.CreateRole(string roleName)
    {
        throw new NotImplementedException();
    }

    public bool IRoleProvider.DeleteRole(
        string roleName, 
        bool throwOnPopulatedRole)
    {
        throw new NotImplementedException();
    }
}


Answer 2:

你应该让你的RoleProviderpublic也。

public class RoleProvider 
{
   ...
}

基类不能超过派生类不太容易接近。 您RoleProvider类可能已经有较少access modifiersCustomRoleProvider类。

    public class CustomRoleProvider : RoleProvider
    {
        public void CreateRole(string roleName)
        {
            throw new NotImplementedException();
        }

        public bool DeleteRole(string roleName, bool throwOnPopulatedRole)
        {
            throw new NotImplementedException();
        }
    }

    interface RoleProvider
    {
           void CreateRole(string roleName);

           bool DeleteRole(string roleName, bool throwOnPopulatedRole);
    }

其实,你不必写public接口上的关键字。 接口成员都自动public 。 他们不能包含任何访问修饰符。



Answer 3:

这意味着你已经定义RoleProvider ......不过是一个私有类(这是真的吗?)。 试着做RoleProvider一个public



Answer 4:

试着改变RoleProvider类的访问说明符要么公开或内部。



文章来源: What is inconsistent accessibility error?