访问结构中的字段

本文关键字:字段 结构 访问 | 更新日期: 2023-09-27 18:20:15

例如,我有一个名为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类访问,我该怎么办?

访问结构中的字段

在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

如果在MyHouse中修改

int Light;

成为

public int Light {get; private set;}

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

c.GetHouse().Light

说明:

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

{get; private set;}Light从一个简单的字段变成了一个属性,基本上是一个访问被getter和setter方法包裹的字段。在您的示例中,Light的值仅在MyHouse的构造函数中设置,因此我制作了setter private。这意味着只有MyHouse可以改变Light的值;但是City仍然可以得到该值。

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

您可以称之为:

int i = c.GetHouse().Light;

但仅当CCD_ 26是CCD_。现在不是,这会阻止您访问字段。

您可以利用字段创建属性。我建议把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的列表,而不仅仅是一个。也许您应该将GetHouse()设为List<House> Houses属性。