【问题标题】:Creating own object model (like that of Excel VBA)创建自己的对象模型(如 Excel VBA)
【发布时间】:2013-03-13 21:07:12
【问题描述】:

我是 Stackoverflow 的新手,如果我问错了问题,希望会员能原谅我。 我刚刚开始学习 C# 和课程。我想到的一个非常基本的问题是如何创建我的类的对象模型(层次结构)。让我解释一下:

比方说,我有一个名为 PEX 的课程。当我实例化这个类时,它应该包含一些属性、方法和另一个名为 Windows 的类。现在 Windows 还将包含一些方法和属性以及另一个类 Window。

类 Windows & Window 不应直接访问,而只能通过 PEX 类访问。

Windows 将返回所有 Window 实例....基本上就像 Excel 对象模型一样。

我应该能够做 foreach(Window window in PEX.Windows) { ....} 和其他类似的东西...... 我也阅读了继承,但无法获得此对象模型。

public class PEX
{
    public _Windows Windows;

    public PEX()
    {
        Windows = new _Windows();
    }
}

public class _Windows
{
    public _Window Window;
    private int _count;

    public _Windows()
    {
        Window = new _Window();
        _count = 10;
    }

    public int Count
    {
        get { return _count; }
    }       
}

public class _Window
{

    private string _title;

    public _Window()
    {
        _title = "Roshan";
    }

    public string Title
    {
        get { return _title; }
    }
}

【问题讨论】:

  • 你试过什么?您是否已经尝试编写一些代码,或者您对继承和 oop 的概念完全陌生? (是的,就目前而言,我认为这是一个“错误”的问题,但至少你承认它可能是一个问题,这是朝着正确方向的巨大飞跃:))
  • 我已经把我试过的东西放了一个sn-p,谢谢

标签: c#


【解决方案1】:

您所描述的通常称为factory pattern。这是父类负责创建子类的地方。此外,您可能希望避免使用 Window 作为类名。这是一个简单的例子,其中一个类有一个嵌套类。

public class PEX
{
 public List<PexWindow> Windows { get; set; }//list of windows you can foreach on
 public PEX()
 {
  Windows = new List<PexWindow>();//constructor to make sure the list can be worked with
 }

 private class PexWindow
 {
  public int Param { get; set; }
  public string Description { get; set; }
 }
}

【讨论】:

  • 很好的答案,但将Windows 属性声明为List&lt;&gt; 可能会出现问题,具体取决于具体情况。因为它不仅允许foreach 迭代,而且还允许.Add 向集合中添加新的PexWindow 实例,这可能是也可能不是。
  • @stakx - 这是一个有效的观点。缺少具体的细节,这就是为什么我选择将其保留为List(可通过当前的PEX 实例公开访问)。也许private IEnumerable 或等效的可能更合适,我想它实际上只取决于当时的规范和实现。
猜你喜欢
  • 1970-01-01
  • 2021-02-14
  • 2017-04-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-10-18
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多