由于保护级别,类属性无法访问

时间:2013-05-23 16:18:15

标签: c# class oop access-levels

这是我的班级声明

public class PlacesAPIResponse
{
    public string formatted_address { get; set; }
    public Geometry geometry { get; set; }
    public Location location { get; set; }
    public string icon { get; set; }
    public Guid id { get; set; }
    public string name { get; set; }
    public string reference { get; set; }
    public string[] types { get; set; }
}
public class Geometry
{
    Location location { get; set; }
}
public class Location
{
    public double lat { get; set; }
    public double lon { get; set; }
}

当我尝试像这样访问它时,但是由于保护级别而导致“无法访问”

PlacesAPIResponse response = new PlacesAPIResponse();
string lon = response.geometry.location.lon;

我可能做错了什么?

4 个答案:

答案 0 :(得分:4)

您需要将Geometry.location字段声明为公开字段:

public class Geometry
{
    public Location location;
}

默认情况下,如果没有为类成员显式声明访问修饰符,则假定它的可访问性为private

来自C#规范部分10.2.3 Access Modifiers

  

当class-member-declaration不包含任何访问修饰符时,   假设是私人的。


顺便说一句,您也可以考虑将其作为财产(除非它是mutable struct

编辑:此外,即使您解决了访问问题,Location.lon也会被声明为double,但您隐式将其分配给string。您还需要将其转换为字符串:

string lon = response.geometry.location.lon.ToString();

答案 1 :(得分:0)

location的{​​{1}}属性未指定辅助功能级别。默认级别为Geometry

答案 2 :(得分:0)

Geometry.location没有访问修饰符,因此默认情况下它是私有的

答案 3 :(得分:0)

将位置设为公开。它默认是私有的。

public class Geometry
{
    public Location location;
}

你可以访问lon as double

PlacesAPIResponse response = new PlacesAPIResponse();
double lon = response.geometry.location.lon;