方法没有访问修饰符
好的,这是窃听我..我知道我已经读过的地方,谷歌没有帮助。
什么是没有指定访问修饰符的方法的可访问性级别?
void Foo() { //code }
我想说internal
但我不是100%肯定。
types的默认可访问性是internal
,但是该types成员的默认可访问性取决于types。
一般来说,一个类的成员默认是private
的,其中一个结构的成员默认是public
的。 这因语言而异。 用于C ++的默认结构访问修饰符是公共的,在C#中它们是私有的。
假设这是一个C#方法,因为你有“.net”标签。
人们需要区分“成员”可访问性和“类”可访问性。
- C#中类成员(包括方法)的默认可访问性是私有的。 请参阅https://msdn.microsoft.com/en-us/library/ba0a1yw2(v=vs.140).aspx
- 类本身的默认可访问性是内部的。
是的, internal
是默认的类,但private
是默认的成员。
对于一个类:如果没有指定访问修饰符,那么Internal是默认值。
对于一种方法:如果没有指定访问修饰符,私有是默认的。
从Anders Hejlsberg 等人 的C#编程语言第三版 ,第435页第10.3.5节(“类成员 – 访问修饰符”):
类成员声明可以具有五种可能的声明可访问性(§3.5.1)中的任何一种:
public
,protected internal
,protected
,internal
或private
。 除了protected internal
组合外,指定多个访问修饰符是编译时错误。 当类成员声明不包含任何访问修饰符时,假定为private
。 [强调我的]
然后在第539页的11.2节(“结构成员”)中:
除了§11.3中提到的差异之外,§10.3到§10.14中提供的类成员的描述也适用于struct成员。
11·3节没有提到有关访问修饰符的任何内容,所以我的阅读意味着没有访问修饰符的struct
成员默认也是private
的。 这符合MSDN所说的和我自己的经验。
等等,还有一件事….
interface
方法声明当然是按照定义public
的。 所以下面的实现是public
,没有明确的访问修饰符。
public class MyClass : IEqualityComparer<MyClass> bool IEqualityComparer<MyClass>.Equals(MyClass x , MyClass y) {} }
类方法是私有的,并在.NET中默认密封。 这意味着该方法仅在类中可见,不能被inheritance类重写。
希望能够从MSDN直接明确所有截图