嵌套类?具有属性的属性

本文关键字:属性 嵌套 | 更新日期: 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确实声明了另一种类型,但是:

  1. 它将是私有的,仅供Fruit成员使用,除非您将其声明为 public .
  2. 创建
  3. 类型不会创建该类型的实例或 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());