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 として宣言する必要があります。

public class Geometry
{
    public Location location;
}

既定では、クラス メンバーのアクセス修飾子を明示的に宣言しない場合、想定されるアクセシビリティは ですprivate

C# 仕様セクション10.2.3 Access Modifiersから:

class-member-declaration にアクセス修飾子が含まれていない場合、private が想定されます。


余談ですが、それをプロパティにすることも検討できます(変更可能な structでない限り)

編集:さらに、アクセスの問題を修正した場合でも、Location.lonは として宣言されてdoubleいますが、暗黙的に に割り当てていますstring。これも文字列に変換する必要があります。

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

場所を公開します。デフォルトではプライベートです。

public class Geometry
{
    public Location location;
}

そして、あなたは二重としてlonにアクセスできます

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