相关疑难解决方法(0)

如何在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
查看次数

使用用作受保护字段的内部类型

我有一个包含2个公共类的类库,它们继承自抽象类.在抽象类上,我有一个受保护的字段,只能由继承的类访问.用于该字段的类型是内部类的类型.

例如,我有:

internal class MyInternalClass
{
    ...
}

public abstract class MyAbstractClass
{
    protected MyInternalClass myField;
}
Run Code Online (Sandbox Code Playgroud)

现在我明白这不会起作用,因为如果派生自MyAbstract类的其中一个类扩展到程序集之外,那么访问myField将是非法的.

我的问题是如何在保持MyInternalClass内部(它不应该在程序集外部可访问)并允许程序集中的类扩展MyAbstractClass以访问myField的情况下使事情正常工作?

.net c#

7
推荐指数
1
解决办法
574
查看次数

标签 统计

c# ×2

.net ×1

access-modifiers ×1