内部返回类型的C#protected internal方法?

时间:2018-03-13 07:49:46

标签: c#

这是否意味着protected方法中的internal方法不能public

internal class InternalReturnType
{
}

public class PublicTypeWithProtectedMethod
{
    //build succeeded when I remove `protected`
    internal protected InternalReturnType GetValue()
    {
        return new InternalReturnType();
    }
}

public sealed class PublicTypeWithPublicMethod : PublicTypeWithProtectedMethod
{
    public void Print()
    {
        var value = base.GetValue();
    }
}

1 个答案:

答案 0 :(得分:5)

internal protected表示可以从声明程序集或任何程序集中的任何派生类型访问该成员。由于InternalReturnType标记为internal,因此只能从声明程序集中访问它。这就是为什么编译器抱怨因为它不能遵守这两个限制,如果你可以从任何程序集中的任何派生类型访问GetValue,你应该能够从任何程序集中访问InternalReturnType,但是它标记为internal,因此不应该从任何程序集访问它。您可以从会员中删除protected,也可以将InternalReturnType公开。

注意根据您要执行的操作,您应该查看private protected(可在C#7.2上找到)。这将允许仅在程序集中访问派生类型。