1

在 Excel 对象模型中,“ Thisworkbook ”是一个包含“ Worksheets ”类的类,可以用索引或工作表名称重载。此外,“ Worksheets ”类还具有一些属性/方法,可以在调用/不调用构造函数的情况下调用(默认)。

  • 例如 MsgBox ThisWorkbook.Worksheets(1).Name '<-- by (int)
  • 例如 MsgBox ThisWorkbook.Worksheets("Sheet1").Name '<- by (string)
  • 例如 Msgbox Thisworkbook.Worksheets.Count '<- 'count 属性

如何在C#中创建这样的类,其中包含另一个类并且可以重载?我尝试在第一类中创建第二类的公共变量,但我只能调用默认构造函数(或其他 - 但一次只能调用一个)

class A
{
    public B b = new B(); // <-- this is 1st constructor but how to overload ?
}

class B
{
    public B() // Default Constructor
    {
    }
    public B(int i) // Constructor 2
    {
    }
    public B(string s) // Constructor 3
    {
    }
    public int Count // Property
    {
        get { return 0; }
    }
}

//------------------------------------------------------------

class Main()
{

   A a = new A();
   a.b.Count(); // <-- THIS WORKS
   // a.b(1).Name; <-- HOW TO, USING THE SAME CLASS?
   // a.b("A").Name; <-- HOW TO, USING THE SAME CLASS?
}

我知道我没有创建一个对象数组——在这个例子中可以返回 1 或“A”,但我只需要这个概念(你猜对了吗?)。我也见过一些使用 List 的例子,但我真的很想知道如何在 C# 中实现这样的对象层次结构......(如果这是一个错误的问题,请原谅)。

4

1 回答 1

2

你误解了运营商。

您看到的是在类上定义的索引运算符Worksheets
在 C# 中,这将被称为a.b[1]or a.b["2"]

你这样定义它:

public SomeType this[int index] { get { ... } }
public SomeType this[string index] { get { ... } }
于 2013-03-25T20:20:19.333 回答