1

私が取り組んでいる現在のクラス ライブラリには、「フィールド」から継承され、読みやすさを維持するためにネストされる 50 を超える特定の「フィールド」タイプを持つ基本クラス (フィールド) があります。例えば...

abstract class Field
{
    public int Length { get; set; }

    public class FieldA : Field
    {
        public static void DoSomething()
        {
            Console.WriteLine("Did something.");
        }
    }
}

これまでのところ、すべて問題ないように見え、次のようにコードを使用できます。

class Program
{
    static void Main(string[] args)
    {
        Field.FieldA.DoSomething();
    }
}

しかし、なぜこれも同様に機能するのでしょうか? コンパイラ/IDE インテリセンスがこれらの「FieldA」を連鎖し続けることを可能にするために、ここで何が起こっているのでしょうか?

class Program
{
    static void Main(string[] args)
    {
        Field.FieldA.FieldA.FieldA.FieldA.FieldA.FieldA.FieldA.DoSomething();
    }
}

決してアプリケーションを壊すわけではありませんが、それは独特だと思いました。Boo (ライブラリに使用されている実際の言語) でも同じことを行います。

4

3 に答える 3

4

次のようなものが欲しかったようです:

abstract class Field
{
    public int Length { get; set; }
}

public class FieldA : Field
{
    public static void DoSomething()
    {
        Console.WriteLine("Did something.");
    }
}

それ以外の場合は、継承者も取得する内部クラスを含む基本クラスを定義しています。したがって、外部クラスから継承して内部クラスを作成すると、ループが開始されます。

于 2009-01-18T21:34:04.093 に答える
2
  1. Fieldという名前のpublicネストされたクラスがありますFieldA
  2. FieldAから継承Field
  3. FieldAからいつでもアクセスできますFieldA

参照は無限チェーンを作成していません。単に同じクラスを指しています。(いくつかのテストコード)

にアクセスすると、前者は のインスタンスであるため、後者FieldA.FieldAはアクセス可能であり、後者は実際にアクセスしますFieldAFieldAFieldFieldAField.FieldA

于 2009-01-18T21:35:16.387 に答える
1

FieldA は、クラス FieldA への参照を継承する クラス FieldA への参照を継承する クラス FieldA への参照を継承する クラス FieldA への参照を継承する クラス FieldA への参照を継承する クラス FieldA への参照を継承する クラス FieldA への参照を継承する...

それがあなたがそうするように言ったので、それは機能します。

于 2009-01-18T21:37:34.663 に答える