在命名空间中定义的元素不能显式声明为私有的、受保护的或受内部保护的
本文关键字:受保护 内部 保护 声明 定义 命名空间 元素 不能 | 更新日期: 2023-09-27 18:08:09
我尝试将一个类设置为私有的,得到了这个错误"在命名空间中定义的元素不能显式地声明为私有的、受保护的或受保护的内部"
我明白它的意思,但我想问为什么这是不允许的?是否所有的访问修改都不适用于类?为什么我不能使一个类私有,受保护或受保护的内部?
因为private意味着成员只在包含它的类中可见。因为顶级类没有包含它的类,所以它不能是私有的(或受保护的)。(Internal或public都是有效的修饰符)。
你希望private在顶级类中是什么意思?
当然,所有的修饰符都适用于嵌套类,即在另一个类中定义的类。
Namespace级别只能使用public
或internal
正如Abatonime所说,您只能在命名空间级别使用public
或internal
。private
、protected
、protected internal
只能在Class级别使用。
namespace X
{
class A
{
// class code here
private class B // this class is an inner class
{
// class code here
}
}
}
这不会
namespace X
{
class A
{
// class code here
}
private class B // this is a class inside a namespace
{
// class code here
}
}
因为这没有意义。您无法访问在命名空间级别定义的受保护类或私有类,只能访问嵌套类。
只有嵌套类可以声明为私有。非嵌套类只能是公共的或内部的(不带修饰符的隐式)
我遇到了同样的问题,因为我正在创建一个自定义DLL,并且只希望某些类对使用DLL的应用程序可见。因此,对于我想要私有的类(在特定的命名空间内),我只是完全删除了修饰符。DLL中相同名称空间内的其他类仍然可以访问这些类,但在调用应用程序的智能感知中没有显示这些类。不需要嵌套类。我能想到的唯一解释是错误消息说不能"显式"声明private…它没有说任何隐含的东西。
namespace SmartCardAuthentication
{
class SmartCardIdentity : IIdentity
{
private string _firstName;
private string _lastName;
private string _middleInitial;
....
}
}
在上面的示例代码中,类"SmartCardIdentity"对同一名称空间内的其他类可用,但当该类滚入DLL时,对调用应用程序不可用。我还没有测试过它的任何其他方式(即可见性从类在不同的命名空间内的DLL)。
顶级类型的可访问性默认为internal
。
类和结构成员的默认可访问性是private
。
接口和枚举成员唯一可能的可访问性是public
。
所以一个类默认是private
,如果你想访问它,你必须把public
放在它之前
只有Public和Internal可以定义类。如果在类默认值内部之前没有定义访问修饰符。
参考MSDN - [https://msdn.microsoft.com/en-us/library/8fd16xs0(v=vs.90).aspx]
在现实世界中,我们关注的是可见的物体一旦对象可见,我们就讨论对象
的作用域实例
如果你走在街上,你会看到一群房子殖民地有房子。如果殖民地受到保护没有人看不到房子
编程中如果我们在顶层设置class为private/protected没人知道这件事
是否存在于汇编中?
如果我超出了范围,请纠正我