1

Excelオブジェクトモデルでは、「Thisworkbook」は「Worksheets 」クラスを含むクラスであり、インデックスまたはシート名でオーバーロードできます。さらに、「Worksheets」クラスには、コンストラクターを呼び出す/呼び出さずに呼び出すことができるいくつかのプロパティ/メソッドもあります(デフォルト)。

  • 例:MsgBox ThisWorkbook.Worksheets(1).Name '<-by(int)
  • 例:MsgBox ThisWorkbook.Worksheets( "Sheet1")。Name '<-by(string)
  • 例:MsgboxThisworkbook.Worksheets.Count'<- 'countプロパティ

別のクラスがあり、オーバーロードできるC#でそのようなクラスを作成するにはどうすればよいですか?1番目のクラスで2番目のクラスのパブリック変数を作成しようとしましたが、デフォルトのコンストラクター(または他のコンストラクターを呼び出すことができますが、一度に1つだけ)を呼び出すことができます

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

あなたは演算子を誤解しています。

表示されているのは、クラスで定義されているインデックス演算子です。 C#では、これはまたはと呼ばれます。Worksheets
a.b[1]a.b["2"]

次のように定義します。

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