系列文章:
标签:block 成员 应该 section 集中 类库 注意 red sharp
原文:https://blogs.msdn.microsoft.com/mazhou/2017/10/05/c-7-series-part-5-private-protected/
C#有几个可访问性修饰符,public、internal、internal protected和private。
private protected
C# 7.2增加了一个新的可访问性级别:private protected。这是为了匹配CLR中已经存在的相同的访问级别。
如果开发人员希望实现仅对内部组件级别可见的东西,这是非常有用的。
示例
为了演示private protected的行为,我创建了一个包含两个项目的解决方案:一个是类库项目,另一个是引用该类库项目的控制台应用程序。我在类库项目中创建了类型:
public class Base { protected private void M() { Console.WriteLine("From Base.M()"); } } public class D1 : Base { new public void M() { Console.WriteLine("From D1.M()"); base.M(); } }
在类型Base中,我声明了一个private protected成员M(),然后在派生自Base的D1类中,我创建了一个方法M()并在内部调用base.M()。这两种类型在同一个程序集中,所以我应该可以从D1访问base.M()。
然后我创建另外一个类型C:
public class C { public void M() { Base b = new Base(); b.M(); D1 d = new D1(); d.M(); } }
我试图在C.M()方法中调用b.M(),但是因为C没有继承Base,所以我没有访问Base.m()的权限,因此代码无法工作;我看到这个编译错误:
最后,我在控制台程序项目中创建了一个类型,它不在Base类型所在的序集。如果我试图在这里访问Base.M(),我将得到这个编译错误:
注意:要想重现上面的示例,你需要将你的项目升级到C# 7.2或更新版本。
结论
现在,在C# 7.2中,我们有5个级别的可访问性:public、internal、protected、internal protected和private protected。新加入的private protected将收益于仅对所在程序集中的派生类型可访问,以便为某些成员提供特殊的内部实现。有关更多详细信息,请参阅这个页面。
系列文章:
[译]C# 7系列,Part 5: private protected 访问修饰符
标签:block 成员 应该 section 集中 类库 注意 red sharp
原文地址:https://www.cnblogs.com/wenhx/p/csharp-7-series-part-5-private-protected.html