我使用自定义角色提供者,我做了一个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”。
我哪里做错了吗?
基类RoleProvider
,你是通过暴露CustomeRoleProvider
不public
。
如果声明RoleProvider
为public
错误将消失。 你不必给RoleProvider
一个public
构造函数。
另外,您可以的无障碍环境减少CustomRoleProvider
到的RoleProvider
。 这可能是最合适的答案,你需要公开CustomRoleProvider
大会之外?
如果RoleProvider
是一个接口,那么,按照惯例,它被错误命名,你可以将其重命名以IRoleProvider
。 在任何情况下,仍不入店然后CustomRoleProvider
。
让公众这样,
public interface IRoleProvider
{
void CreateRole(string roleName);
bool DeleteRole(string roleName, bool throwOnPopulatedRole);
}
如果没有指定的无障碍环境interface
, class
或struct
, internal
是隐含的。
interface
成员总是public
。 class
和struct
成员是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();
}
}
你应该让你的RoleProvider
类public
也。
public class RoleProvider
{
...
}
基类不能超过派生类不太容易接近。 您RoleProvider
类可能已经有较少access modifiers
比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
。 他们不能包含任何访问修饰符。
这意味着你已经定义RoleProvider
......不过是一个私有类(这是真的吗?)。 试着做RoleProvider一个public
。
试着改变RoleProvider类的访问说明符要么公开或内部。