我想知道public和internal可见性修饰符之间的区别.
什么时候我们应该internal在课堂上使用public什么时候?我很困惑与当一个方法应该是public或internal.
我读过internal可以通过程序集访问,同时public也可以通过程序集使用差异所在.
internal class Foo
{
public void Fee()
{
Debug.WriteLine("Fee");
}
internal void Fi()
{
Debug.WriteLine("Fi");
}
}
Run Code Online (Sandbox Code Playgroud)
我认为Fee()和Fi()同样可以访问,因为整个类已经是内部的.我忽略了什么吗?在这样的情况下,有没有理由选择公共或内部方法?
好的,所以这可能是一个有点愚蠢的问题,肯定有明显的答案,但我很好奇,如果我错过了任何细微之处.
public在internal类中internal声明的成员与在类中声明的成员之间的可见性/可用性方面是否有任何区别internal?
即之间
internal class Foo
{
public void Bar()
{
}
}
Run Code Online (Sandbox Code Playgroud)
和
internal class Foo
{
internal void Bar()
{
}
}
Run Code Online (Sandbox Code Playgroud)
如果您将方法声明为publicand virtual,然后在派生类中对其进行覆盖,则public使用此修饰符的原因很明显.然而,这是唯一的情况......我错过了别的什么吗?
最近,我正在编写一个类,我决定将其作为包私有(即没有访问修饰符或默认修饰符).它有一个内部类和一些private辅助方法,以及一个旨在由同一个包中的类使用的方法.所有这些班级成员都是static.但后来我有一个想法:这个方法应该有public访问修饰符还是没有访问修饰符,比如包含它的类?
一方面,由于类本身是包私有的,因此只能在其包中访问和使用它,因此没有实际的理由来制作该方法public.但同时,在语义上,此方法旨在成为类的公共特性,即,旨在外部使用的类的特性,因此修改其访问权限是有意义的.
对于那些喜欢看代码的人,
final class DummyRemover {
private DummyRemover() {
}
public static int remove(Map<String, ClassNode> classMap) {
return 0;
}
// ...
}
Run Code Online (Sandbox Code Playgroud)
要么,
final class DummyRemover {
private DummyRemover() {
}
// Notice the modifier.
static int remove(Map<String, ClassNode> classMap) {
return 0;
}
// ...
}
Run Code Online (Sandbox Code Playgroud)
这里最好的选择是什么?是否有一个经验法则来决定在这种情况下使用哪些访问修饰符?
我已经实现了一个单例类,并且不断收到警告,我正在编写的方法是一个'在密封类中声明的新受保护成员'.它不会影响构建,但我真的不想忽略警告,以防以后出现问题?我理解一个密封类是一个不能被继承的类 - 所以它的方法不能被覆盖,但我仍然不明白为什么下面的代码会给我警告(是因为使用了单例设计?):
namespace WPFSurfaceApp
{
public sealed class PresentationManager
{
PresentationManager()
{
}
protected void MethodName()
{
}
public static PresentationManager Instance
{
get
{
return Nested.instance;
}
}
class Nested
{
// Explicit static constructor to tell C# compiler
// not to mark type as beforefieldinit
static Nested()
{
}
internal static readonly PresentationManager instance = new PresentationManager();
}
}
Run Code Online (Sandbox Code Playgroud)
编辑:警告是关于MethodName()方法.编辑:将public void MethodName()更改为protected void MethodName()
我正在构建一个具有一些基本功能的DLL.长话短说,我正在制作一些静态类供开发者使用.这些类使用其他一些做脏工作的类,我将其标记为内部,因为我不希望人们访问它们.
问题是:如果我将一个类声明为内部类,那么其成员的访问级别是什么?
我必须将其所有成员标记为内部,否则它们会自动标记为内部成员?
这是一个好2小时,我正在和谷歌搜索在搜索计算器,我努力寻找一个清晰而直接的答案不包括1000揣测,技术不太可能hypotesis和无用的装饰...
MSDN像往常一样令人困惑(从未在msdn上找到明确的答案).
从我在这里可以阅读http://msdn.microsoft.com/en-us/library/ms173121.aspx我想无论你如何设置类访问级别,他的所有成员都将是私有的(方法,变量等等)上).
救命,我不知道