作用一:限制对类的可访问性
有时候会遇到这样的需求,希望一个类仅能被另一个类(以及其派生类)访问。
代码
class BaseClass
{
public class PublicNestedClass { }
protected class ProtectedNestedClass { }
private class PrivateNestedClass { }
}
class DerivedClass : BaseClass
{
PublicNestedClass a;
ProtectedNestedClass b;
PrivateNestedClass c;
PublicDerivedNestedClass a2;
ProtectedDerivedNestedClass b2;
PrivateDerivedNestedClass c2;
public class PublicDerivedNestedClass { }
protected class ProtectedDerivedNestedClass { }
private class PrivateDerivedNestedClass { }
}
class OtherClass
{
PublicNestedClass a;
ProtectedNestedClass b;
PrivateNestedClass c;
}
class DerivedDerivedClass : DerivedClass
{
PublicNestedClass a;
ProtectedNestedClass b;
PrivateNestedClass c;
PublicDerivedNestedClass a2;
ProtectedDerivedNestedClass b2;
PrivateDerivedNestedClass c2;
}
编译器提示报错的地方
分析
- BaseClass类内部用 public protected 关键字声明的内部类,外部的类和这个类都可见。
- 用 private 关键字声明的内部类,仅对这个类可见。
- 派生类也适用以上规则。
作用二:为多个类提供公共的属性
public abstract class BaseMainSwitch
{
public static bool IsActive = false;
public void Init()
{
SetActive(true);
}
public static void SetActive(bool value)
{
IsActive = value;
}
public abstract class BaseSubSwitch
{
private bool _isOpen = true;
public static void SetActive(bool value)
{
_isOpen = value;
}
}
public class DerivedSubSwitch : BaseSubSwitch
{
public void DoSomething()
{
if (IsActive && this._isOpen)
{
// code
}
}
}
}
用例
public class DerivedMainSwitch : BaseMainSwitch
{
DerivedSubSwitch _switch1;
DerivedSubSwitch _switch2;
}
每个SubSwitch各自有开关状态,且有公共的IsActive控制总开关。