讓我們看看幾個例子,第一公共類私有/ protected成員:
public class PublicClass
{
public void PublicMethod()
{
ProtectedMethod(); //Valid call
PrivateMethod(); //Also valid
}
protected void ProtectedMethod()
{
PublicMethod(); //Valid
PrivateMethod(); //Valid
}
private void PrivateMethod()
{
PublicMethod(); //Valid
PrivateMethod(); //Valid
}
}
public class SomeOtherClass
{
public void SomeMethod()
{
PublicClass c = new PublicClass();
c.PublicMethod(); //Valid
c.ProtectedMethod(); //Invalid, not accessible
c.PrivateMethod(); //Also invalid
}
}
這裏,所有這些類別呼叫都在內部有效,但對PublicClass
以外的任何內容都不可見,包括任何來自PublicClass
的類別。 ProtectedMethod
也隱藏在類之外,但仍繼承PublicClass
,這樣的類訪問:
public class InheritedPublicClass : PublicClass
{
public void MyPublicMethod()
{
PublicMethod(); //Calls base class method
ProtectedMethod(); //Calls base class method
PrivateMethod(); //Invalid, not accessible
}
}
到PrivateMethod()
的調用是一個編譯時錯誤,因爲它不是在InheritedPublicClass
訪問。
Private允許您創建僅對直接類可見的方法,並且除此之外沒有任何方法。受保護允許您創建內部可見的方法,並且可以從任何派生類中看到它們。
現在讓我們看一個私有類:
public class ParentClass
{
private class NestedClass
{
public void PublicMethod() { }
private void PrivateMethod() { }
}
private void SomeMethod()
{
//NestedClasscan only be created by methods of ParentClass
var nc = new NestedClass();
nc.PublicMethod(); //Internally visible
nc.PrivateMethod(); //Invalid, not accessible
}
}
這裏NestedClass
是私有的,因爲它是嵌套在ParentClass
。對於包括繼承者的NestedClass
以外的任何人都不可見。如果我們將它保護起來,那麼繼承者將能夠看到它。
此外,NestedClass.PrivateMethod()
在嵌套類的實現之外不可見。
這對於在類之外沒有任何意義的內部數據結構很有用。
可能使用公共方法的私人類的重複?(http://stackoverflow.com/questions/7777256/private-class-with-public-method) –
只有當它們嵌套在內部時,類纔可以是私有的或受保護的其他類,否則它們是公開的或內部的(如果未指定,內部是默認的)。如果你認爲它是一個嵌套類,那麼私有類可以被它自己的類型訪問,並且可以訪問它的公共方法,這樣做更有意義。 –
@RonBeyer但是在什麼情況下會發生這樣的情況:public class A - > private class B - > public members?而不是使用B中的私有/受保護成員更有意義?我在混合什麼? – shole