Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/297.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 不带访问修饰符的方法_C#_.net_Encapsulation - Fatal编程技术网

C# 不带访问修饰符的方法

C# 不带访问修饰符的方法,c#,.net,encapsulation,C#,.net,Encapsulation,好吧,这让我很烦。。我知道我在某个地方读过,但谷歌帮不了我 不指定访问修饰符的方法的可访问性级别是什么 void Foo() { //code } 我想说internal,但我不是100%确定。对于类:如果未指定访问修饰符,则默认为internal 对于方法:如果未指定访问修饰符,则默认为Private。是,internal是类的默认值,但Private是成员的默认值。类型的默认可访问性是internal,但是该类型的成员的默认可访问性取决于该类型 一般来说,类的成员默认为私有,而结

好吧,这让我很烦。。我知道我在某个地方读过,但谷歌帮不了我

不指定访问修饰符的方法的可访问性级别是什么

void Foo()
{
    //code
} 

我想说
internal
,但我不是100%确定。

对于类:如果未指定访问修饰符,则默认为internal


对于方法:如果未指定访问修饰符,则默认为Private。

是,
internal
是类的默认值,但
Private
是成员的默认值。

类型的默认可访问性是
internal
,但是该类型的成员的默认可访问性取决于该类型

一般来说,的成员默认为
私有
,而结构的成员默认为
公共
。这因语言而异;C++的默认结构访问修饰符是公共的,对于C,它们是私有的。

假设这是一个C方法,因为你有“.NET”标签。< /P> 人们需要区分“成员”可访问性和“类”可访问性

  • C#中类成员(包括方法)的默认可访问性是私有的。看
  • 类本身的默认可访问性是内部的
摘自C#编程语言,Anders Hejlsberg等人第三版,第10.3.5节(“类成员-访问修饰符”),第434页:

类成员声明可以具有五种可能的声明可访问性(§3.5.1)中的任意一种:
公共的
受保护的内部的
受保护的
内部的
,或
私有的
。除了受保护的内部组合之外,指定多个访问修饰符是编译时错误当类成员声明不包含任何访问修饰符时,将假定为私有。[Emphasis mine]

然后在第539页第11.2节(“结构成员”)中:

除了§11.3中指出的差异外,§10.3至§10.14中提供的类别成员描述也适用于结构成员


第11.3节没有提到任何关于访问修饰符的内容,因此我对它的理解意味着没有访问修饰符的
struct
的成员在默认情况下也是
private
。这符合我自己的经验。

哦,等等,还有一件事

接口
方法声明根据定义当然是公开的。因此,下面的实现是公共的,没有显式的访问修饰符

public class MyClass : IEqualityComparer<MyClass>
    bool IEqualityComparer<MyClass>.Equals(MyClass x , MyClass y) {}
}
公共类MyClass:IEqualityComparer
bool IEqualityComparer.Equals(MyClass x,MyClass y){}
}

类方法在.NET中是私有的,默认情况下是密封的。
这意味着该方法仅在类中可见,不能被继承的类重写

希望这能根据MSDN的截图澄清所有问题


你们确定这次投票会失败吗?如果我将一个方法放在一个C#类中,没有访问修饰符,C#3.0编译器会将它构建为一个私有方法。Steve是正确的。类方法的默认可访问性是
private
。你自己试试。这个答案是正确的。只是在VS2010中验证了它,因为我原先也认为它是错误的。C++中的代码< >结构> <代码>的成员是默认的<代码>公共< /代码>,但是根据从其他几个答案链接的MSDN页面,
struct
的成员在C#-1中默认为
private
,因为两个权威引用称
struct
的成员在C#中默认为
private
。(MSDN是其中之一,C#编程语言第三版是另一种。)顺便说一句,接口方法不能是私有的哦,是的。见“备注”