声明带有内部类型的公共类方法的可访问性不一致错误(c#)



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

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

编辑:我做了Jon Skeet建议的修改,问题就解决了。我遇到这个问题是因为习惯将我的类默认声明为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;
}
解决这种情况的最好方法是什么?

您需要将JsonPetShelters设置为public,或者将GetShelters()设置为internal。

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

一旦你确定了你想要以一致的方式实现的目标,做出改变应该很简单。

编辑:正如你所说的,你只想在同一个程序集中的代码能够调用该方法,只需将其更改为内部:

internal JsonPetShelters GetShelters()
{ 
    ...
}

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

可以显式声明类Constructor并使其成为内部类,而该类仍然是公共的。

允许每个程序集使用该类,但只有您的程序集可以创建实例。

public class JsonPetShelters
{
    [JsonProperty("@encoding")]
    public string Encoding { get; set; }
    [JsonProperty("@version")]
    public string Version { get; set; }
    [JsonProperty("petfinder")]
    public Petfinder Petfinder { get; set; }
    internal JsonPetShelters() {}
}

相关内容

  • 没有找到相关文章

最新更新