作用一:限制对类的可访问性
有时候会遇到这样的需求,希望一个类仅能被另一个类(以及其派生类)访问。
代码
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控制总开关。