C# 什么是不一致的可访问性错误?
我正在使用自定义角色提供程序,为此我创建了一个C# 什么是不一致的可访问性错误?,c#,asp.net,class,interface,C#,Asp.net,Class,Interface,我正在使用自定义角色提供程序,为此我创建了一个CustomRoleProvider类,并在其中实现了一些RoleProvider方法,如下所示 public class CustomRoleProvider: RoleProvider { public override void CreateRole(string roleName) { throw new NotImplementedException(); } public override
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();
}
}
所有的方法都是公共的,但是它显示了错误
错误4-不一致的可访问性:基类
“RoleProviderExample.RoleProvider”比类更难访问
'RoleProviderExample.CustomRoleProvider'
我哪里做错了?这意味着您已经定义了
RoleProvider
。。。但是作为一个私人阶级(这是真的吗?)。尝试将RoleProvider设置为一个公共这意味着您已经定义了RoleProvider
。。。但是作为一个私人阶级(这是真的吗?)。尝试将角色扮演者设置为公共的
您也应该将您的角色扮演者设置为公共的类
public class RoleProvider
{
...
}
基类的可访问性不能低于派生类。您的RoleProvider
类的类可能少于CustomRoleProvider
类
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 class RoleProvider
{
...
}
基类的可访问性不能低于派生类。您的RoleProvider
类的类可能少于CustomRoleProvider
类
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
关键字。接口成员自动公开
。它们不能包含任何访问修饰符。尝试将RoleProvider类的访问说明符更改为public或internal。尝试将RoleProvider类的访问说明符更改为public或internal。通过CustomerProvider
公开的基类RoleProvider
不可用public
如果将RoleProvider
声明为public
错误将消失。您不必给RoleProvider
apublic
构造函数
或者,您可以将CustomRoleProvider
的可访问性降低为RoleProvider
的可访问性。这可能是最合适的答案,您是否需要将CustomRoleProvider
暴露在程序集之外
如果RoleProvider
是一个接口,那么按照惯例,它会被错误命名,您可以将其重命名为IRoleProvider
。在任何情况下,它都比CustomRoleProvider
更难访问
这样公开,
public interface IRoleProvider
{
void CreateRole(string roleName);
bool DeleteRole(string roleName, bool throwOnPopulatedRole);
}
如果未指定接口
、类
或结构
的可访问性,则隐含内部
接口
成员始终是公共的
<代码>类
和结构
成员是私有的
,除非另有规定
最好指定,除非接口成员总是公共的
您的实现可能如下所示,接口实现不应使用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();
}
}
通过CustomerProvider
公开的基类RoleProvider
不是public
如果将RoleProvider
声明为public
错误将消失。您不必给RoleProvider
apublic
构造函数
或者,您可以将CustomRoleProvider
的可访问性降低为RoleProvider
的可访问性。这可能是最合适的答案,您是否需要将CustomRoleProvider
暴露在程序集之外
如果RoleProvider
是一个接口,那么按照惯例,它会被错误命名,您可以将其重命名为IRoleProvider
。在任何情况下,它都比CustomRoleProvider
更难访问
这样公开,
public interface IRoleProvider
{
void CreateRole(string roleName);
bool DeleteRole(string roleName, bool throwOnPopulatedRole);
}
如果未指定接口
、类
或结构
的可访问性,则隐含内部
接口
成员始终是公共的
<代码>类
和结构
成员是私有的
,除非另有规定
最好指定,除非接口成员总是公共的
您的实现可能如下所示,接口实现不应使用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();
}
}
你的基类不是public你的基类不是public受保护的
比public
My bad更难访问。从错误中吸取教训。protected
比public
My bad更难访问。但是RoleProvider是一个接口,CustomRoleProvider是一个类,它已经是公共的了。如何公开RoleProvider接口?@Anand,如果RoleProvider
是一个接口,那么override
关键字是虚假的和误导性的,正如RoleProvider
的命名一样@Jodrell OP想要编写它们。如果他想更改它们,它们当然是可删除的。但是RoleProvider是一个接口,CustomRoleProvider是一个类,它已经是公共的了。如何公开RoleProvider接口?@Anand,如果RoleProvider
是一个接口,那么override
关键字是虚假的和误导性的,正如RoleProvider
的命名一样@Jodrell OP想要编写它们。如果他想更改它们,它们当然是可删除的。但是RoleProvider是一个接口,CustomRoleProvider是一个类,它已经是公共的了。我怎么能