相关疑难解决方法(0)

计划的"私有保护"C#访问修饰符的含义是什么?

作为GitHub上Roslyn文档的一部分,有一个名为语言功能实现状态的页面,具有C#和VB的计划语言功能.

我无法理解的一个功能是private protected访问修饰符:

private protected string GetId() { … } 
Run Code Online (Sandbox Code Playgroud)

还有一个C#语言设计笔记页面,它解释了许多新功能,但不是这个.

Eric Lippert在评论中说:

您的错误在于将修饰符视为增加限制.实际上,修饰符总是减少限制.请记住,默认情况下,事物是"私人的"; 只有通过添加修饰符才能减少限制.

是什么意思private protected?我什么时候可以使用它?

c# access-modifiers c#-6.0 c#-7.2

132
推荐指数
5
解决办法
1万
查看次数

如何在C#中保护属性和内部?

这是我缩短的抽象类:

abstract class Report {

    protected internal abstract string[] Headers { get; protected set; }
}
Run Code Online (Sandbox Code Playgroud)

这是一个派生类:

class OnlineStatusReport : Report {

    static string[] headers = new string[] {
        "Time",
        "Message"
    }

    protected internal override string[] Headers {
        get { return headers; }
        protected set { headers = value; }
    }

    internal OnlineStatusReport() {
        Headers = headers;
    }
}
Run Code Online (Sandbox Code Playgroud)

我的想法是,我希望能够Report.Headers从程序集中的任何地方调用,但只允许它由派生类设置.我尝试Headers只做内部,但受保护不算比内部更严格.有没有办法使Headers内部及其set访问器受到保护和内部?

我觉得我非常滥用访问修饰符,所以任何设计帮助都会非常感激.

c# access-modifiers

28
推荐指数
5
解决办法
9409
查看次数

标签 统计

access-modifiers ×2

c# ×2

c#-6.0 ×1

c#-7.2 ×1