可能重复:
What is the difference between 'protected' and 'protected internal'?
What is the difference between Public, Private, Protected, and Nothing?
代码如下所述:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace testanotherlib
{
public class A
{
internal void InternalDisplay()
{
Console.WriteLine("Internal Display Method.");
}
protected void ProtectedDisplay()
{
Console.WriteLine("Protected Display Method.");
}
protected internal void ProtectedInternalDisplay()
{
Console.WriteLine("ProtectedInternal Display Method.");
}
public void PublicDisplay()
{
Console.WriteLine("Public Display Method.");
}
}
}
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace testanotherlib
{
public class B : A
{
}
}
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using testanotherlib;
namespace testlib
{
public class C:A
{
}
}
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using testlib;
using testanotherlib;
namespace testapp
{
class Program
{
static void Main(string[] args)
{
B objB = new B();
C objC = new C();
}
}
}
我试图理解内部,受保护和受保护内部之间的区别。为此,我使用上面的代码创建了一个示例。
在类库项目testanotherlib中,我有A类和A类。在类库项目testlib中,我有类C.程序类在一个单独的控制台应用程序中。在Program类的主要方法中,我为类B(objB)和类C(objC)创建了对象。对于objB和objC,只能访问A类的公共方法。我期待B级的所有方法都可以访问。请帮助我理解这一点。如果您需要有关该项目的任何其他信息,请随时向我询问。
此致 Priyank
答案 0 :(得分:14)
可以使用访问修饰符指定以下五个辅助功能级别:
公开:访问不受限制。
protected:访问仅限于从包含类派生的包含类或类型。
内部:访问仅限于当前程序集。
protected internal:访问仅限于从包含类派生的当前程序集或类型。
private:访问仅限于包含类型。
答案 1 :(得分:5)
internal
仅在当前和友好的程序集中可见。
protected
仅在继承A
的类中可见。
protected internal
在继承A
的类中可见。并且在当前和友好的集会中也可见。
答案 2 :(得分:4)
protected个方法和成员。
class A
{
protected void Method() {}
}
class B : A
{
public void Foo()
{
Method(); // works!
}
}
class C
{
public void Foo()
{
Method(); // won't work, obviously
var tmp = new A();
tmp.Method(); // won't work either because its protected
}
}
internal使该方法仅在同一个程序集中可见。对于同一程序集中的类,可以像使用公共方法一样使用该方法。对于当前组合以外的类,它就像私有类一样。
现在,将protected和internal组合在一起,可以在该程序集中的所有类的同一程序集中使用该方法。并且受保护使得该方法可用于所有派生类,无论哪个程序集。