【发布时间】:2014-05-21 06:17:07
【问题描述】:
当我们使用受保护的内部任何类的任何数据成员时,我们知道该数据成员可以在同一个程序集中使用,但我不知道受保护的内部可以从其他程序集中使用。从这里我知道了Have you ever seen design with reasonable usage of protected internal access modifier?
汇编1中的代码
public class A
{
internal protected virtual void YoBusiness()
{
//do something
}
public void test() { }
}
class B
{ // not a derived class - just composites an instance of A
public B()
{
A a = new A();
a.YoBusiness(); // Thanks friend for the access!
}
}
class D : A
{ // derived across assemblies
internal protected override void YoBusiness()
{
// Hey thanks other guy, I can provide a new implementation.
}
}
assembly2 中的代码
class C : A
{ // derived across assemblies
public C()
{
YoBusiness();
}
protected override void YoBusiness()
{
// Hey thanks other guy, I can provide a new implementation.
}
}
我一直都知道受保护的内部可以在同一个程序集中使用,但今天知道并惊讶于其他程序集的任何类也可以覆盖该方法......它是如何成为可能的?
如果我希望只有数据成员可以被覆盖或从同一个程序集中调用,那么我需要做什么......请讨论。谢谢
【问题讨论】:
-
不确定这里的问题是什么。如果您将其标记为
protected,则派生类可以访问它。如果你不想这样,不要标记它protected。 -
+1:我不知道为什么这个问题被否决了。我也没有看到受保护的内部有任何好处,我打算问同样的问题,看看其他人如何使用它。