c# - 使用内部类型(C#)声明公共(public)类方法时出现不一致的可访问性错误?

标签 c# public internal class-visibility

我有一个 JSON 类对象,它是一个内部类。我想保持这种方式,以防止其他代码尝试创建该类型的对象,因为我只希望 JSON 反序列化代码这样做。我可以将类类型用作变量,但如果我尝试返回该类型的对象,我会得到 可访问性不一致 编译器错误,因为方法是 公众 类(class)是内部 .

解决这种情况的最佳方法是什么?我想我可以为内部类创建一个接口(interface)并传递它,但这意味着我必须为我正在使用的每个 JSON 类创建额外的包袱,而且我使用了很多。

编辑:我做了 Jon Skeet 建议的改变,问题就消失了。由于默认情况下将我的类(class)声明为公共(public)的习惯,我遇到了这个问题。我为其他正在做同样事情的人指出这一点。

// The internal class.
internal class JsonPetShelters
{

    [JsonProperty("@encoding")]
    public string Encoding { get; set; }

    [JsonProperty("@version")]
    public string Version { get; set; }

    [JsonProperty("petfinder")]
    public Petfinder Petfinder { get; set; }
}

// This method gets the inconsistent accessibility error since
//   JsonPetShelters is an internal class.
public JsonPetShelters GetShelters()
{
    // For example purposes only
    return null;
}

最佳答案

What is the best way to resolve this situation?



您要么需要制作JsonPetShelters公开,或设为 GetShelters()内部的。

那么您希望能够从不同的程序集中调用此方法吗?如果是这样,在不了解返回类型的情况下,您希望调用者如何使用它?如果不是,为什么该方法是公开的?

一旦您以一致的方式确定了您想要实现的目标,那么进行更改应该很简单。

编辑:正如您所说,您只希望同一程序集中的代码能够调用该方法,只需将其更改为内部:
internal JsonPetShelters GetShelters()
{ 
    ...
}

编译时错误将消失,您将不再公开您一开始不想公开的成员。

关于c# - 使用内部类型(C#)声明公共(public)类方法时出现不一致的可访问性错误?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16279504/

相关文章:

c# - 压缩完成后立即删除图像文件。如何?

c# - 如何使用 mysql 删除附加行

javascript - 函数表达式中的私有(private)变量

android - 访问 com.android.internal.telephony.Call

seo - 改进词典的内部链接结构

c# - 从 Azure 网站连接到 SSAS 多维数据集

javascript - 将 JSON 从文本字段解析为对象数组

javascript - 无法查看 meteor 公共(public)目录中的新文件

java - 使用多个类。程序无法启动

c# - 允许 Newtonsoft 的 JsonConvert 访问内部 getter/setter