어떻게 외부에서 외부에서 인스턴스 메서드의 특정 정의를 정적으로 호출하여 해당 클래스의 다형성을 금지합니까? 즉, Visual Basic.NET의 MyClass
과 동등한 것이 필요합니다.비 다형 적으로 인스턴스 메서드를 D에서 호출 하시겠습니까?
답변
당신은 대리자를 구축하고이를 호출하여 전화를 강제 할 수
binarySize(MyClass myObject) { ... }
아직 D 컴파일러에 추가되지 않은 특징은과 같이이 호출 할 수있는 기능입니다. 보낸 사람 :
void delegate(int, float) dg;
dg = &t.theFunction; // gives the function for the dynamic type
// OR
dg.ptr = t; // gives the object
dg.funcptr = &typeof(t).theFunction; // gives the function for the static type
dg(1,3.1415);
OTOH이 책은 내 책의 해킹이며 일부 유형의 경우 문제가 발생할 것입니다.
typeof(this).myfunc()
클래스 인스턴스 함수를 사용하면 비 가상 호출을 할 수 있습니다. 가상 클래스를 외부 클래스에서 가상으로 호출해야하는 경우 호출을 래핑 할 클래스에 새로운 (최종) 메서드를 추가 할 수 있습니다.
제안 해 주셔서 감사합니다. 불행히도 문제는 클래스 외부에서이 작업을해야한다는 것입니다. 클래스에 위와 아래로 작동하는 매우 일반적인 코드가 있기 때문에 클래스에 새로운 메서드를 추가 할 수는 없습니다. 그 특정 레벨에 대한 계층 구조의 모든 레벨에서'object.binarySize() '라고 말할 수 있으며, 실용적이지 않기 때문에 모든 클래스에 대해 각 레벨마다 다른 함수를 추가 할 수는 없습니다. (Mixins도 도움이되지 않습니다.) – Mehrdad
원하는 동작이 아닌 경우 다형 클래스 메서드를 사용하는 이유가 있습니까? 또한 클래스 외부에서 무엇을 의미하는지 확신 할 수 없습니다 (객체의 인스턴스없이 멤버 함수를 호출하겠습니까?).
내가해야 할 일은 첫 번째 매개 변수로 개체를 가져 오는 일반 함수를 작성하는 것입니다.
myObject.binarySize();
답장을 보내 주셔서 감사합니다! 나는 * 때때로 * 필요하기 때문에 다형성 메서드를 사용하고 있지만 때로는 그렇지 않습니다 - 각 경우에 대해 두 가지 동작이 모두 필요합니다. (아, 그리고 클래스 밖에서, 나는 외부 코드를 의미한다.) 'object'에 의해 나는 당신이'myObject'를 의미한다고 가정한다. 맞습니까? 이게 도움이 될지 모르겠지만 그걸 살펴볼 것입니다. 감사. – Mehrdad
@Lambert, 나는 binarySize 함수 내에서 코드가 아니기 때문에 객체를 사용 했으므로 변수 이름이 될 수 있습니다. 나는 당신이 다형성 행동이 클래스 메소드를 호출하기를 원한다면 이것이 최선의 선택이라고 생각한다. 그렇지 않으면 비 다형성 함수를 호출해야한다. 클래스 외부에서 메소드를 추가하는 것은 불가능합니다. –
좋습니다. 고마워요! – Mehrdad
- 1. 메서드를 비동기 적으로 호출
- 2. Java에서 다형 적으로 디스 패칭
- 3. 추상 클래스와 배열을 다형 적으로 사용하기
- 4. C# :이 메서드를 비 재귀 적으로 만드는 방법
- 5. this를 사용하여 인스턴스 변수를 호출 하시겠습니까?
- 6. mvc3 컨트롤러에서 javascript 메서드를 호출 하시겠습니까?
- 7. Django/Python의 특정 시간에 메서드를 호출 하시겠습니까?
- 8. 연결하지 않고 슬롯 메서드를 호출 하시겠습니까?
- 9. JavaScript에서 Adobe Flex/ActionScript 메서드를 호출 하시겠습니까?
- 10. 비 개체에서 메서드 호출?
- 11. 델리게이트/DLR 람다를 사용하여 인스턴스 메서드를 재정의 하시겠습니까?
- 12. Asp.Net Ajax - 비 정적 메서드 호출
- 13. 암시 적으로 인스턴스 변수를 인스턴스에 할당 할 수 있습니까?
- 14. Python에서 자식 클래스의 부모 클래스의 메서드를 호출 하시겠습니까?
- 15. 인스턴스 변수가 PHP 클래스에서 참조 될 때 메서드를 실행 하시겠습니까?
- 16. 비동기 적으로 수신 된 데이터의 비 직렬화
- 17. 런타임에 인스턴스 메서드를 동적으로 만드는 방법은 무엇입니까?
- 18. 사전 적으로 정렬 하시겠습니까?
- 19. 호출 비 정적 메소드
- 20. 호출 비 DLL 기능은
- 21. Blob ... 비 재귀 적으로 작성하는 방법
- 22. 이름으로 비 정적 메서드 호출
- 23. vb.net에서 비동기 적으로 webservice 호출
- 24. RequiredFieldValidator가 실행 된 후에 JavaScript 메서드를 호출 하시겠습니까?
- 25. $ this 또는 parent ::를 사용하여 상속 된 메서드를 호출 하시겠습니까?
- 26. VS2005 - 별도의 프로젝트에서 메서드를 호출 하시겠습니까? (동일한 솔루션)
- 27. Android : 인 텐트를 사용하여 클래스 대신 메서드를 호출 하시겠습니까?
- 28. 가상 메서드를 C#에서 명시 적으로 재정의해야합니까?
- 29. 가비지 수집기 메서드를 명시 적으로 호출하면 어떻게됩니까?
- 30. 호출 동기 방식 비동기 적으로 UI 스레드
Ohhhhhhh 그래서'fnptr'을 다음과 같이 사용할 수 있습니다. * 그게 내가 찾고있는 것입니다! 고맙습니다! – Mehrdad
@ 램버트 : BTW, 그것은 "funcptr"라고 쓰여 있습니다 : http://www.digitalmars.com/d/1.0/function.html#closures 제 잘못입니다. – BCS
오, 고마워. – Mehrdad