2012-01-15 1 views
1

Java 및 .NET 배경에서 왔습니다.VB6에서 Printer.Print 사용

VB6에서는 클래스를 사용할 때 항상 클래스 인스턴스를 만들 필요가없는 것처럼 보입니다. 예를 들어, Printer 클래스를 사용할 때 인스턴스를 먼저 만들지 않고 새로운 프린터로 Dim printer를 누른 다음 printer.Print를 실행하는 대신 Printer.print를 간단히 말하면됩니다. Printer는 VB6의 시스템 객체이지만, 인스턴스를 생성해야하는 이유는 무엇입니까?

답변

0

VB6은 새로운 언어에 익숙하다면 기대했던 것과 같은 방식으로 객체 지향 언어가 아닙니다. VB6에서는 암시 적 인스턴스화를 수행하고 특정 작업을 정적 인 것처럼 처리 할 수 ​​있습니다. 예를 들어 양식의 변수를 선언 할 수는 있지만 반드시 그렇게 할 필요는 없습니다. 양식을 직접 호출하고 선언하지 않고 조작 할 수 있습니다. 프린터의 경우 명시 적으로 선언하고 인스턴스화 할 수 없지만 VB6에는 이미 사용할 수있는 인스턴스가 있습니다.

+0

감사합니다. Employee라는 새 클래스를 만들고 AddEmployee라는 메서드가 있다고 가정 해 보겠습니다. 나는 Employee의 인스턴스를 생성해야만한다. (예를 들어) AddEmployee가 정적 메서드 인 것처럼 Employee.AddEmployee를 단순히 실행할 수는 없다. – w0051977

+2

"거의 모든 것"을 정적으로 처리 할 수 ​​없다. 여기서 런타임은 양식의 자동 인스턴스를 제공하지만 다른 객체에는 적용되지 않으므로 사용자가 만든 Employee 클래스에는 적용되지 않습니다. 프린터에 대해서는 런타임에서 제공하는 단일 객체입니다 – MarkJ

+0

어떤 구문은 인식되고 다르게 처리됩니다. 인쇄는 하나의 특수한 경우이며 의사 메소드가 아닌 메소드가 아니라 메소드로 문서화되거나 객체 브라우저에 표시되거나 Intellisense 또는 With 블록과 함께 사용할 수도 없으며 일반적인 매개 변수 목록과 달리 "매개 변수"구문을 사용합니다. 예, 컴파일러는이 비니어를 실제 개체 방향 위에 적용하고 개체에 "새로 만들기" instationation 의미론, 양식 (및 심지어 클래스)은 미리 선언 된 "새로 만들기"전역 인스턴스를 가질 수 있습니다. – Bob77

5

Visual Basic에는 전통적으로 컴파일러에서 직접 인식 할 수있는 많은 수의 미리 정의 된 식별자가있었습니다. Printer 객체는 그 중 하나입니다. 후드에서이 코드는 [appobject] attribute으로 구현되었지만주의 깊게 숨겨져 있습니다. 런타임은 As New 구문과 마찬가지로 COM coclass의 인스턴스를 자동으로 만듭니다. DAO DBEngine 개체는 언어 파서에서 미리 정의되지 않은 개체의 예입니다.

이것은 Java와 마찬가지로 대규모 클래스 라이브러리가 포함 된 진정한 객체 지향 언어 인 VB.NET에서 끝났으며이를 수행했습니다. 더 이상 Printer 객체가 없으므로 PrintDocument 클래스를 사용해야합니다. Printer 개체는 Microsoft.VisualBasic.PowerPacks.Printing.Compatibility.VB6 네임 스페이스에서 사용할 수있는 레거시 코드에 대해 계속 지원됩니다. 그러나 인스턴스를 만들려면 키워드가 필요합니다.

VB6에서 많은 시간과 노력을 투자 할 때 모든면에서 심하게 오래된 언어입니다.