这是否意味着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();
}
}
答案 0 :(得分:5)
internal protected
表示可以从声明程序集或任何程序集中的任何派生类型访问该成员。由于InternalReturnType
标记为internal
,因此只能从声明程序集中访问它。这就是为什么编译器抱怨因为它不能遵守这两个限制,如果你可以从任何程序集中的任何派生类型访问GetValue
,你应该能够从任何程序集中访问InternalReturnType
,但是它标记为internal
,因此不应该从任何程序集访问它。您可以从会员中删除protected
,也可以将InternalReturnType
公开。
注意根据您要执行的操作,您应该查看private protected
(可在C#7.2上找到)。这将允许仅在程序集中访问派生类型。