1

这是我的班级声明

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

4 回答 4

4

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

public class Geometry
{
    public Location location;
}

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

从 C# 规范部分10.2.3 访问修饰符

当类成员声明不包含任何访问修饰符时,假定为私有。


顺便说一句,您也可以考虑将其设为属性(除非它是可变的 struct

编辑:此外,即使您修复了访问问题,Location.lon也被声明为 adouble但您隐含地将其分配给 a string。您还需要将其转换为字符串:

string lon = response.geometry.location.lon.ToString();
于 2013-05-23T16:19:45.050 回答
0

公开位置。默认情况下它是私有的。

public class Geometry
{
    public Location location;
}

你可以访问 lon 作为 double

PlacesAPIResponse response = new PlacesAPIResponse();
double lon = response.geometry.location.lon;
于 2013-05-23T16:21:36.937 回答
0

location属性Geometry没有指定可访问性级别。默认级别是private

于 2013-05-23T16:20:02.890 回答
0

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

于 2013-05-23T16:20:27.350 回答