从结构

时间:2015-11-02 12:13:17

标签: c# field

我有一个名为MyHouse的结构。例如。

struct MyHouse
{
    int Light;
    int Water;
    int Food;

    public MyHouse(int Light, int Water, int Food)
    {
        this.Light = Light;
        this.Water = Water;
        this.Food = Food;
    }
}

城市课程:

class City
{
    private MyHouse house;
    public City(MyHouse house)
    {
        this.house = house;
    }
    public MyHouse GetHouse()
    {
        return house;
    }
}

主要是例如我创建

 City c = new City(new MyHouse(3,6,1));

其中Cityclass所在的struct MyHouse。如果我想获取MyHouse的光线数量,可以从City课程获取,我该怎么做?

4 个答案:

答案 0 :(得分:2)

在MyHouse中添加一个属性,以便可以访问私有数据:

private int light;
public int Light{
  get { return light; }
}

然后你可以写:

int l = c.GetHouse().Light;

当然GetHouse()可以变成属性

public MyHouse House{
  get { return house; }
  set {light = house;}
}

属性比方法“更好”,因为:

  • 可以轻松使用调试 - 将鼠标悬停在属性上并查看值

  • 它们常用于框架(实体框架,图形组件)。属性用于自动显示列

属性比直接访问字段“更好”,因为:

- 如果客户端代码用于访问该属性,则可以稍后将代码添加到属性getset  没有任何改变客户端 - 如果它们是virtual,则它们可以是子类中的overriden

答案 1 :(得分:2)

如果在MyHouse中修改

int Light;

public int Light {get; private set;}

您可以从City对象中获取光照值,如下所示:

c.GetHouse().Light

说明:

publicLight的可见性从private(默认值)更改为public。私有类/结构成员只能由类本身在内部访问。如果在其他课程中可以使用,例如City,我已公开。

{get; private set;}Light从简单字段转换为属性,基本上是一个字段,其访问权限包含在getter和setter方法中。在您的示例中,Light的值仅在MyHouse的构造函数中设置,因此我创建了setter private。这意味着只有MyHouse才能更改Light的值;但是,City仍然可以获得该值。

答案 2 :(得分:0)

你可以这样称呼:

int i = c.GetHouse().Light;

但仅当Lightpublic时。现在它不会阻止您访问该字段。

您可以在字段中创建属性。我建议Light一个class

class MyHouse
{
    public int Light {get;set;}
    public int Water {get;set;}
    public int Food {get;set;}

    public MyHouse(int light, int water, int food)
    {
        this.Light = light;
        this.Water = water;
        this.Food = food;

    }
}

我还希望City有一个House的列表,而不仅仅是一个。{1}}。也许你应该GetHouse() List<House> Houses属性。

答案 3 :(得分:0)

如果您没有指定任何属性,例如public,protected或private,则C#将变量设为私有的&#34; struct&#34;。因此,您需要将变量设置为public,以便可以直接访问它或添加公共方法来访问私有变量。