嵌套类?具有属性的属性
本文关键字:属性 嵌套 | 更新日期: 2023-09-27 18:18:36
我想创建一个具有子属性的属性的类...
换句话说,如果我做了这样的事情:
Fruit apple = new Fruit();
我想要这样的东西:
apple.eat(); //eats apple
MessageBox.Show(apple.color); //message box showing "red"
MessageBox.Show(apple.physicalProperties.height.ToString()); // message box saying 3
我认为它会像这样做:
class Fruit{
public void eat(){
MessageBox.Show("Fruit eaten");
}
public string color = "red";
public class physicalProperties{
public int height = 3;
}
}
。但是,如果这行得通,我就不会在这里了...
这么近! 以下是代码应如何读取:
class Fruit{
public void eat(){
MessageBox.Show("Fruit eaten");
}
public string color = "red";
public class PhysicalProperties{
public int height = 3;
}
// Add a field to hold the physicalProperties:
public PhysicalProperties physicalProperties = new PhysicalProperties();
}
类只是定义签名,但嵌套类不会自动成为属性。
作为旁注,我还要推荐几件事,遵循。NET的"最佳实践":
- 除非必要,否则不要嵌套类
- 所有公共成员都应是属性而不是字段
- 所有公共成员都应该是PascalCase,而不是camelCase。
我相信也有很多关于最佳实践的文档,如果你有这样的倾向的话。
class Fruit{
public void eat(){
MessageBox.Show("Fruit eaten");
}
public string color = "red";
//you have declared the class but you havent used this class
public class physicalProperties{
public int height = 3;
}
//create a property here of type PhysicalProperties
public physicalProperties physical;
}
你能推断出这个类,然后引用它吗?
class Fruit{
public void eat(){
MessageBox.Show("Fruit eaten");
}
public string color = "red";
public physicalProperties{
height = 3;
}
}
public class physicalProperties{
public int height = 3;
}
class Fruit{
public class physicalProperties{
public int height = 3;
}
}
Fruit.physicalProperties
确实声明了另一种类型,但是:
- 它将是私有的,仅供
Fruit
成员使用,除非您将其声明为public
.
创建 - 类型不会创建该类型的实例或
Fruit
的成员以允许Fruit
的用户访问它。
您需要添加:
class Fruit {
private physicalProperties props;
public physicalProperties PhysicalProperties { get; private set; }
并在 Fruit
的(默认(构造函数中PhysicalProperties
分配一个 physicalProperties
的实例。
您需要公开该属性,因为它包含在类physicalProperties
的实例中,所以也许您可以这样做
public Fruit()
{
physical = new physicalProperties();
}
以及归还它的财产
public int Height { get { return physical.height;}}
或
public physicalProperties physical;
这样你就可以做apple.physical.height
class Fruit{
public void eat(){
MessageBox.Show("Fruit eaten");
}
public string color = "red";
public class physicalProperties{
public int height = 3;
}
// create a new instance of the class so its public members
// can be accessed
public physicalProperties PhysicalProperties = new physicalProperties();
}
然后,您可以像这样访问子属性:
Fruit apple = new Fruit();
MessageBox.Show(apple.PhysicalProperties.height.ToString());