C#具有内部返回类型的受保护内部方法?

C#具有内部返回类型的受保护内部方法?,c#,C#,这是否意味着受保护方法不能是公共类型中的内部 internal class InternalReturnType { } public class PublicTypeWithProtectedMethod { //build succeeded when I remove `protected` internal protected InternalReturnType GetValue() { return new InternalReturnTyp

这是否意味着
受保护
方法不能是
公共
类型中的
内部

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();
    }
}

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


注意根据您要做的事情,您应该查看(可在C#7.2上获得)。这将只允许在程序集中的派生类型中进行访问。

内部保护
意味着可以从声明的程序集或任何程序集中的任何派生类型访问成员。由于
InternalReturnType
标记为
internal
,因此只能从声明程序集访问它。这就是为什么编译器抱怨不能同时满足这两个限制,如果您可以从任何程序集中的任何派生类型访问
GetValue
,那么您应该能够从任何程序集中访问
InternalReturnType
,但是它被标记为
internal
,因此不应该从任何程序集中访问它。您可以从成员中删除
protected
,或将
InternalReturnType
公开


注意根据您要做的事情,您应该查看(可在C#7.2上获得)。这将只允许在程序集中访问派生类型。

您是否尝试编译或启动此程序?你犯了什么错误?你想实现什么?为什么不自己试试呢?要做到这一点,你需要你的
InternalReturnType
类继承一个公开可见的基类或接口,并让你的
PublicTypeWithProtectedMethod.GetValue
方法返回这个基类或接口。你试过编译或启动这个程序吗?你犯了什么错误?你想实现什么?为什么不自己尝试一下呢?要做到这一点,你需要
InternalReturnType
类继承一个公开可见的基类或接口,并让
PublicTypeWithProtectedMethod.GetValue
方法返回这个基类或接口。谢谢。和
private protected
仅在C#7.2之后才可用,因此我将内部方法移到了另一个内部类中,并改为调用此公共类型。@runerback将该版本添加到注释中以澄清:)谢谢。和
private protected
仅在C#7.2之后才可用,因此我将内部方法移到了另一个内部类中,并改为调用此公共类型。@runerback将该版本添加到注释中以澄清:)