C# protected internal
示例
protectedinternal关键字标记字段,方法,属性和嵌套类为相同的组件内使用或派生类中另一组件:
组装1
public class Foo { public string MyPublicProperty { get; set; } protected internal string MyProtectedInternalProperty { get; set; } protected internal class MyProtectedInternalNestedClass { private string blah; public int N { get; set; } } } public class Bar { void MyMethod1() { Foo foo = new Foo(); var myPublicProperty = foo.MyPublicProperty; var myProtectedInternalProperty = foo.MyProtectedInternalProperty; var myProtectedInternalNestedInstance = new Foo.MyProtectedInternalNestedClass(); } }
组装2
public class Baz : Foo { void MyMethod1() { var myPublicProperty = MyPublicProperty; var myProtectedInternalProperty = MyProtectedInternalProperty; var thing = new MyProtectedInternalNestedClass(); } void MyMethod2() { Foo foo = new Foo(); var myPublicProperty = foo.MyPublicProperty; // 编译错误 var myProtectedInternalProperty = foo.MyProtectedInternalProperty; // 编译错误 var myProtectedInternalNestedInstance = new Foo.MyProtectedInternalNestedClass(); } } public class Qux { void MyMethod1() { Baz baz = new Baz(); var myPublicProperty = baz.MyPublicProperty; // 编译错误 var myProtectedInternalProperty = baz.MyProtectedInternalProperty; // 编译错误 var myProtectedInternalNestedInstance = new Baz.MyProtectedInternalNestedClass(); } void MyMethod2() { Foo foo = new Foo(); var myPublicProperty = foo.MyPublicProperty; //编译错误 var myProtectedInternalProperty = foo.MyProtectedInternalProperty; // 编译错误 var myProtectedInternalNestedInstance = new Foo.MyProtectedInternalNestedClass(); } }