내부 중첩 클래스의 외부 클래스에 액세스

user3065410

이것은 오브젝트 파스칼입니다. 외부 인스턴스 포인터를 엉망으로 만들고 내부로 전달하지 않고 어떻게 든 가능할지 궁금합니다.
내가하고 싶은 것은 내부 메서드를 사용하여 외부 (ClassOne) 클래스에 대한 전체 액세스 권한을 얻는 것입니다. 나는 시도 해왔다 :

{ this class should be able to access by all clases inside it }
ClassOne = class
    type
        { can be accessed by ClassThree, can access: ClassOne }
        ClassTwo = class
            type
                { can be accessed by / can access: ClassOne and ClassTwo }
                ClassThree = class 
                    public
                        procedure MethodOne();
                end;

            private
                FieldOne: Array[1 .. 10] of ClassThree;
                FieldTwo: integer;

            public
                procedure MethodOne();
        end;

    private
        FieldOne: Array[1 .. 5] of ClassTwo;
        FieldTwo: Byte;

    public
        procedure MethodOne(Something: Byte);
end;

이행:

procedure ClassOne.MethodOne(Something: Byte);
begin
    FieldTwo := Something;
end;    

procedure ClassOne.ClassTwo.MethodOne();
begin
    { does something but not important in this case }
end;

procedure ClassOne.ClassTwo.ClassThree.MethodOne();
begin
    { here i need the FieldTwo value of ClassOne of the current instance }
    ClassOne(self).FieldTwo; // Does not work
end;

접속하다:

var Test: ClassOne;

...

Test := ClassOne.Create();
Test.FieldOne[2] := ClassOne.ClassTwo.Create;
Test.FieldOne[2].FieldOne[5] := ClassOne.ClassTwo.ClassThree.Create;

Test.MethodOne(15);
Test.FieldOne[2].MethodOne();
Test.FieldOne[2].FieldOne[5].MethodOne();

반복 및 배열 크기는 임의의 예입니다.

나는 Java에서 그것과 비슷한 것이라고 생각 OuterClass.self.OuterClassField;하지만 이것은 여기서 작동하지 않습니다.
이것은 생성 직후 외부 인스턴스를 전달하여 수행 할 수 있지만 나중에 생성자와 인스턴스에 많은 문제가 발생합니다.
어떻게 그렇게 만들 수 있습니까?

업데이트
아마도 이것은 조상들과 함께해야 할 필요가 있습니까?
이것은 컴파일되지만 ClassTwo 또는 ClassThree의 생성자를 호출 한 직후 충돌합니다. 왜?

ClassOne = class
    type
        ClassTwo = class(ClassOne) { changed ancestor }
            type
                ClassThree = class(ClassTwo) { changed ancestor }
                    public
                        procedure MethodOne();
                end;

            private
                FieldOne: Array[1 .. 10] of ClassThree;
                FieldTwo: integer;

            public
                procedure MethodOne();
        end;

    private
        FieldOne: Array[1 .. 5] of ClassTwo;
        FieldTwo: Byte;

    public
        procedure MethodOne(Something: Byte);
end;
user3065410

좋아, 외부 클래스의 인스턴스를 내부 클래스에 전달하여 올바르게 수행하는 방법은 한 가지 뿐인 것 같습니다.
이를 수행하는 가장 좋은 장소는 내부 클래스 생성자입니다.
이를 위해서는 인스턴스를 보유하는 모든 중첩 클래스에 추가 필드가 필요합니다.
이 수준에서 외부 클래스 (Strict Private 필드 포함)에 대한 전체 액세스 권한이 있습니다.
위의 게시물에서 클래스 구조를 사용한 간단한 예 :

Test := ClassOne.Create();

{ Test is a ClassTwo parent }
Test.FieldOne[2] := ClassOne.ClassTwo.Create(Test);

{ Test.FieldOne[2] is a ClassThree parent }
Test.FieldOne[2].FieldOne[5] := ClassOne.ClassTwo.ClassThree.Create(Test.FieldOne[2]);

그런 다음 evey 중첩 클래스에는 부모라는 필드가 필요합니다.

{ ClassTwo }
Strict Private
    Parent: ClassOne;
    ...
    { ClassThree}
    Strict Private
        Parent: ClassTwo;

용법:

Procedure ClassOne.ClassTwo.ClassThree.Test();
Begin
    { Access ClassOne FieldTwo from ClassThree }
    Parent.Parent.FieldTwo;
End;

이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.

침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제

에서 수정
0

몇 마디 만하겠습니다

0리뷰
로그인참여 후 검토

관련 기사

분류에서Dev

외부 클래스 중첩 열거에 대한 내부 클래스 액세스

분류에서Dev

중첩 클래스의 클래스 내 친구가 외부 클래스 멤버에 액세스 할 수 있습니까?

분류에서Dev

중첩 클래스의 클래스 내 친구가 외부 클래스 멤버에 액세스 할 수 있습니까?

분류에서Dev

내부 클래스에서 외부 클래스의 필드에 액세스

분류에서Dev

중첩 클래스의 NodeJs / Javascript 액세스 부모 메서드

분류에서Dev

추상 클래스 내부의 중첩 클래스

분류에서Dev

테스트를 위해 클래스 내부에 중첩 된 클래스 모의

분류에서Dev

클래스 외부에서 중첩 된 클래스에 액세스 할 수 없습니다.

분류에서Dev

클래스 외부에서 중첩 된 클래스에 액세스 할 수 없습니다.

분류에서Dev

Java의 파생 클래스에서 수퍼 클래스에 중첩 된 개인 내부 클래스에 액세스하는 방법이 있습니까?

분류에서Dev

중첩 된 Python 클래스 및 부모의 메서드에 대한 액세스

분류에서Dev

내부 중첩 클래스에 대한 뷰 XML의 인플레이션 예외

분류에서Dev

중첩 된 내부 클래스 : 상위 메서드에 액세스하고 중첩 된 클래스 유형의 변수를 노출합니다.

분류에서Dev

자바 : 중첩 된 정적 클래스의 외부 클래스 참조

분류에서Dev

다른 클래스에서 내부 클래스에 액세스

분류에서Dev

정적 중첩 클래스는 외부 클래스의 개인 생성자에 액세스 할 수 있습니다.

분류에서Dev

C ++ 템플릿 클래스의 내부 클래스 액세스

분류에서Dev

클래스 외부 클래스의 비공개 멤버에 액세스

분류에서Dev

내부 클래스의 객체에서 외부 클래스 함수에 액세스

분류에서Dev

Python 3의 내부 클래스에서 외부 클래스 개체에 액세스

분류에서Dev

외부 클래스의 내부 클래스 멤버 필드에 대한 Java Android 액세스

분류에서Dev

Objective C의 클래스 외부에서 속성에 액세스

분류에서Dev

정적 클래스 c # 내부에 정적 중첩 클래스 없음

분류에서Dev

중첩 클래스에 외부 클래스 템플릿의 멤버 func에 대한 포인터 전달

분류에서Dev

중첩 클래스에 외부 클래스 템플릿의 멤버 func에 대한 포인터 전달

분류에서Dev

Android의 내부 클래스 내 변수에 액세스

분류에서Dev

파이썬 클래스 외부의 파일에 액세스

분류에서Dev

Java Inner 클래스-외부 객체의 변수에 액세스

분류에서Dev

클래스 외부의 공용 정적 변수에 액세스

Related 관련 기사

  1. 1

    외부 클래스 중첩 열거에 대한 내부 클래스 액세스

  2. 2

    중첩 클래스의 클래스 내 친구가 외부 클래스 멤버에 액세스 할 수 있습니까?

  3. 3

    중첩 클래스의 클래스 내 친구가 외부 클래스 멤버에 액세스 할 수 있습니까?

  4. 4

    내부 클래스에서 외부 클래스의 필드에 액세스

  5. 5

    중첩 클래스의 NodeJs / Javascript 액세스 부모 메서드

  6. 6

    추상 클래스 내부의 중첩 클래스

  7. 7

    테스트를 위해 클래스 내부에 중첩 된 클래스 모의

  8. 8

    클래스 외부에서 중첩 된 클래스에 액세스 할 수 없습니다.

  9. 9

    클래스 외부에서 중첩 된 클래스에 액세스 할 수 없습니다.

  10. 10

    Java의 파생 클래스에서 수퍼 클래스에 중첩 된 개인 내부 클래스에 액세스하는 방법이 있습니까?

  11. 11

    중첩 된 Python 클래스 및 부모의 메서드에 대한 액세스

  12. 12

    내부 중첩 클래스에 대한 뷰 XML의 인플레이션 예외

  13. 13

    중첩 된 내부 클래스 : 상위 메서드에 액세스하고 중첩 된 클래스 유형의 변수를 노출합니다.

  14. 14

    자바 : 중첩 된 정적 클래스의 외부 클래스 참조

  15. 15

    다른 클래스에서 내부 클래스에 액세스

  16. 16

    정적 중첩 클래스는 외부 클래스의 개인 생성자에 액세스 할 수 있습니다.

  17. 17

    C ++ 템플릿 클래스의 내부 클래스 액세스

  18. 18

    클래스 외부 클래스의 비공개 멤버에 액세스

  19. 19

    내부 클래스의 객체에서 외부 클래스 함수에 액세스

  20. 20

    Python 3의 내부 클래스에서 외부 클래스 개체에 액세스

  21. 21

    외부 클래스의 내부 클래스 멤버 필드에 대한 Java Android 액세스

  22. 22

    Objective C의 클래스 외부에서 속성에 액세스

  23. 23

    정적 클래스 c # 내부에 정적 중첩 클래스 없음

  24. 24

    중첩 클래스에 외부 클래스 템플릿의 멤버 func에 대한 포인터 전달

  25. 25

    중첩 클래스에 외부 클래스 템플릿의 멤버 func에 대한 포인터 전달

  26. 26

    Android의 내부 클래스 내 변수에 액세스

  27. 27

    파이썬 클래스 외부의 파일에 액세스

  28. 28

    Java Inner 클래스-외부 객체의 변수에 액세스

  29. 29

    클래스 외부의 공용 정적 변수에 액세스

뜨겁다태그

보관