好的,这个问题困扰着我...我知道我在某个地方读到过它,但Google没有帮助。
如果一个方法没有指定访问修饰符,它的可访问级别是什么?
void Foo()
{
//code
}
我想说 internal
,但我不确定。
好的,这个问题困扰着我...我知道我在某个地方读到过它,但Google没有帮助。
如果一个方法没有指定访问修饰符,它的可访问级别是什么?
void Foo()
{
//code
}
我想说 internal
,但我不确定。
类型的默认可访问性是 internal
,但该类型的成员的默认可访问性取决于这个类型。
一般来说,类的成员默认情况下是private
,而结构体的成员则默认为public
。这也因语言而异;对于C++,结构体的默认访问修饰符为public,而对于C#,则为private。
是的,internal
是类的默认访问级别,但 private
是成员变量的默认访问级别。
对于一个类:如果没有指定访问修饰符,则默认为 internal。
对于一个方法:如果没有指定访问修饰符,则默认为 private。
来自Anders Hejlsberg等人所著的The C# Programming Language, Third Edition,第10.3.5节("类成员-访问修饰符")第434页:
class-member-declaration可以声明五种可能的访问权限之一(§3.5.1):
public
,protected internal
,protected
,internal
或private
。除了protected internal
组合外,如果指定了多个访问修饰符,则会在编译时出错。当不包括任何访问修饰符时,默认为private
。
然后在第11.2节("结构成员")第539页中:
除了§11.3中指出的差异,§10.3至§10.14提供的类成员描述也适用于结构成员。
第11.3节未提及任何访问修饰符,因此我理解没有指定访问修饰符的struct
成员默认为private
。这与MSDN所述以及我的经验相符。
哦,等等,还有一件事…
interface
方法声明在定义时默认是public
的。因此,下面这个实现也是public
的,没有显式指定访问修饰符。
public class MyClass : IEqualityComparer<MyClass>
bool IEqualityComparer<MyClass>.Equals(MyClass x , MyClass y) {}
}
EqualityComparer
,而不是实现接口。请参阅“备注”。 - radarbob在.NET中,类方法默认为私有和密封的。 这意味着该方法仅在类内部可见,并且不能被继承类覆盖。
struct
的成员默认为public
,但根据MSDN页面所述(该页面从其他答案中链接过来),在C#中,struct
的成员默认为private
。 - Daniel Pryden