我有一个名为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));
其中City
是class
所在的struct MyHouse
。如果我想获取MyHouse
的光线数量,可以从City
课程获取,我该怎么做?
答案 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;}
}
属性比方法“更好”,因为:
可以轻松使用调试 - 将鼠标悬停在属性上并查看值
它们常用于框架(实体框架,图形组件)。属性用于自动显示列
属性比直接访问字段“更好”,因为:
- 如果客户端代码用于访问该属性,则可以稍后将代码添加到属性get
或set
没有任何改变客户端
- 如果它们是virtual
,则它们可以是子类中的overriden
答案 1 :(得分:2)
如果在MyHouse
中修改
int Light;
是
public int Light {get; private set;}
您可以从City
对象中获取光照值,如下所示:
c.GetHouse().Light
说明:
public
将Light
的可见性从private
(默认值)更改为public
。私有类/结构成员只能由类本身在内部访问。如果在其他课程中可以使用,例如City
,我已公开。
{get; private set;}
将Light
从简单字段转换为属性,基本上是一个字段,其访问权限包含在getter和setter方法中。在您的示例中,Light
的值仅在MyHouse
的构造函数中设置,因此我创建了setter private
。这意味着只有MyHouse
才能更改Light
的值;但是,City
仍然可以获得该值。
答案 2 :(得分:0)
你可以这样称呼:
int i = c.GetHouse().Light;
但仅当Light
为public
时。现在它不会阻止您访问该字段。
您可以在字段中创建属性。我建议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,以便可以直接访问它或添加公共方法来访问私有变量。