-4

重複の可能性:
なぜ C# のネストされたクラスを使用する必要があるのか

私はそれを短くやっています、私はこのようなクラスを持っています:

namespace Blub {
    public class ClassTest {
        public void teest() {
            return "test";
        }

        public class AnotherTest {
            public void blub() {
                return "test";
            }
        }
    }
}

このように「teest」という関数にアクセスできますが、別の「new ClassTest.AnotherTest()」を行わずに関数「blob」にアクセスするにはどうすればよいでしょうか。

関数 teeest へのアクセス:

Blub.ClassTest = new Blub.ClassTest();
ClassTest.teest(); //test will be returned

私の試み(そして私が望む方法、AnotherTestにアクセスする方法はこれです:

Blub.ClassTest = new Blub.ClassTest();
ClassTest.blub(); //test will be returned

これは機能しません。次のようにAnotherTestにアクセスできますが、望まない方法です:

Blub.ClassTest2 = new Blub.ClassTest.AnotherTest();
ClassTest.blub(); //test will be returned

誰かがこれに対する解決策を知っていますか?

4

2 に答える 2

2

AnotherTest 内部 で宣言しClassTestているため、 を使用して参照する必要がありますnamespace.class.2ndClass

しかし、OO の概念についてはあまりご存知ではないでしょうか。クラス内でメソッドを宣言すると、 として宣言しない限り、そのクラスのオブジェクトでのみ使用可能になります。これは、インスタンス メソッドではなくクラス メソッドstaticになることを意味します。

ClassTest2 つのメソッド (teestと) が必要な場合はblub、次のようにクラスの本体で両方を宣言するだけです。

public class ClassTest
{
    public string teest()
    {
        return "test";
    }


    public string blub()
    {
        return "test";
    }
}

また、メソッドが宣言されている場合、何も返さないことに注意してくださいvoid(実際、元のコードはまったくコンパイルされないと思います)。

自分で物事を理解しようとする前に、OO をもう少し深く勉強することをお勧めします。

于 2012-08-16T17:39:35.433 に答える
0

別のクラスにアクセスする必要がある場合は、それを最初のクラスのプロパティにする必要があります。

namespace Blub {
   public class AnotherTest {
        public void blub() {
            return "test";
        }
    }


  public class ClassTest {
    public AnotherTest at = new AnotherTest();
    public void teest() {
        return "test";
    }


  }
}

次に、次のようにアクセスします。

 ClassTest x = new ClassTest();
 x.at.blub();
于 2012-08-16T17:41:34.647 に答える