[译]C# 7系列,Part 5: private protected 访问修饰符
2021-01-25 12:12
标签: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的行为,我创建了一个包含两个项目的解决方案:一个是类库项目,另一个是引用该类库项目的控制台应用程序。我在类库项目中创建了类型: 在类型Base中,我声明了一个private protected成员M(),然后在派生自Base的D1类中,我创建了一个方法M()并在内部调用base.M()。这两种类型在同一个程序集中,所以我应该可以从D1访问base.M()。 然后我创建另外一个类型C: 我试图在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
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();
}
}
public class C
{
public void M()
{
Base b = new Base();
b.M();
D1 d = new D1();
d.M();
}
}
文章标题:[译]C# 7系列,Part 5: private protected 访问修饰符
文章链接:http://soscw.com/essay/46785.html