好的,这让我感到烦恼..我知道我已经在某个地方看过它了,谷歌没有帮助。
未指定访问修饰符的方法的可访问性级别是什么?
void Foo()
{
//code
}
我想说internal
,但我不是百分百肯定。
答案 0 :(得分:41)
类型的默认辅助功能为internal
,但该类型成员的默认辅助功能取决于类型。
一般来说,类的成员默认为private
,默认情况下结构的成员为public
。这取决于语言; C ++的默认结构访问修饰符是公共的,对于C#,它们是私有的。
答案 1 :(得分:18)
假设这是一个C#方法,因为你有“.net”标签。
人们需要区分“成员”可访问性和“类”可访问性。
答案 2 :(得分:16)
是的,internal
是类的默认值,但private
是成员的默认值。
答案 3 :(得分:9)
对于类:如果未指定访问修饰符,则内部为默认值。
对于方法:如果未指定访问修饰符,则Private为默认值。
答案 4 :(得分:5)
来自 C#编程语言,第三版作者:Anders Hejlsberg 等,第10.3.5节(“类成员 - 访问修饰符”),第434页:
class-member-declaration 可以具有五种可能的已声明可访问性(§3.5.1)中的任意一种:
public
,protected internal
,{{1 },protected
或internal
。除private
组合外,指定多个访问修饰符是编译时错误。 当 class-member-declaration 不包含任何访问修饰符时,假定为protected internal
。 [强调我的]
然后在第532页的第11.2节(“结构成员”)中:
除了第11.3节中提到的差异外,§10.3至§10.14中提供的类成员描述也适用于结构成员。
第11.3节没有提及有关访问修饰符的任何内容,因此我对此的阅读意味着默认情况下,没有访问修饰符的private
成员也是struct
。这符合what MSDN says和我自己的经验。
答案 5 :(得分:3)
哦等等,还有一件事......
根据定义, interface
方法声明当然是public
。因此,以下实现是public
,没有显式访问修饰符。
public class MyClass : IEqualityComparer<MyClass>
bool IEqualityComparer<MyClass>.Equals(MyClass x , MyClass y) {}
}
答案 6 :(得分:0)
类方法是私有的,默认情况下在.NET中是密封的。 这意味着该方法仅在类中可见,并且不能被继承的类覆盖。
答案 7 :(得分:0)