2010-08-18 3 views
3

나는 프로그램 디자이너가 아니지만, 실제로 .NET 언어 (VB, C#)를 더 잘 이해하고 이해하기 시작하고 싶습니다. Wrox - Professional Visual Basic 2008에서 책을 읽었습니다. 모듈에서 서서히 존재하지 않는다고 말한 것으로 믿었습니다. 나는 왜 대부분의 코딩이 클래스 객체에 들어갈 수 있는지를 알 수 있지만 최소한 코드를 깨끗하게 유지하려면 모듈이 항상 필요하다고 가정합니다.모듈은 여전히 ​​프로그램 구조에서 일반적으로 사용됩니까?

아무도 나를 위해 이것을 명확히 할 수 있습니까? 또한, 나는 소프트웨어 디자인에 대한 훌륭한 자료를 찾고 있었지만 최근 출판 된 책을 찾을 수없는 것 같습니다. 나는 틀린 장소에서 수색하고 있을지도 모르지만 나는 진짜로 1에 나의 손을 얻고 싶으면.

감사합니다.

답변

4

동안을 정의하기 위해 모듈을 필요로, 그들은 여전히 ​​사용되며 경우에 필요합니다.

VB.Net에서 확장 메서드를 작성하려면 모듈을 사용해야합니다. 컴파일러는 확장 메서드 만 정의 할 수 있습니다.

물론 모듈을 사용하지 않고 순회 할 수 있습니다 - 개인 생성자가있는 상속 할 수없는 클래스이고 공유 된 메소드 만 사용하면 모듈과 동일한 결과를 얻을 수 있습니다.

프로그래밍 (및 기타 많은 것들)의 모든 것과 마찬가지로, 그들은 사용법을 가지고 있으며, 사용하지 않는 한 문제가 없습니다. 직업에 적합한 도구!

0

모듈은 VB가 정적 클래스에 가장 가까운 것으로 객체 지향 환경에서 프로그래밍 할 때에도 매우 유용합니다.

VB에는 정적 클래스가 없으므로 확장 메서드를 만드는 유일한 방법은 모듈입니다.

0

당신은 그들이 OOP 꽤 맞지 않는 일반적으로 자신의 Extension methods

+0

답변 해 주셔서 감사합니다.Extension 메서드에 대해서는 들어 보지 못했지만 모듈로만 수행 할 수 있음을 알았습니다. 물론이 질문에 대한 답변은 있지만 프로그램의 구조와 모듈 사용에 대해 더 염려했습니다. –

3

VB.NET의 Module 키워드는 주로 VB6 및 이전 버전과의 호환성을 위해 존재합니다. 그 당시 대부분의 VB 코드는 독립 서클이 아닌 클래스 하위 및 함수로 절차 적이었습니다. 언어는 VB4 어딘가에서 Class 키워드를 획득했습니다. OOP 의미에서 참된 클래스는 아니지만 상속을 지원하지 않았습니다. 기본 COM 아키텍처에없는 기능입니다.

CLR에서 제공하는 실행 모델과 잘 맞지 않습니다. 무료 함수를 지원하지 않으므로 모든 메소드가 클래스의 멤버 여야합니다. VB.NET 컴파일러는 클래스를 선언하여 모듈을 에뮬레이트합니다. 모듈 프로시 저는 해당 클래스의 공유 메서드가됩니다. 당신은 Ildasm.exe를 함께이 볼 수없는 코드는 모듈에서 클래스를 파생 할 수 없도록 그 코드는, 그것에 대한 참조를 가져, 밀봉 수 있도록 그것은 개인이 얼마나

.class private auto ansi sealed ConsoleApplication1.Module1 
     extends [mscorlib]System.Object 
{ 
    .custom instance void [Microsoft.VisualBasic]Microsoft.VisualBasic.CompilerServices.StandardModuleAttribute::.ctor() = (01 00 00 00) 
} // end of class ConsoleApplication1.Module1 

참고.

C# 컴파일러는 "정적 클래스"와 똑같은 작업을 수행하지만 CLR에는 정적 클래스 개념이 없습니다. 정적 클래스에는 많은 이유가 있지만, "모듈"에 대한 아이디어는 더 이상 사용되지 않습니다. VB.NET 코드에서 NotInheritable 클래스를 선언하고 Shared 메서드 만 사용하여 동일한 결과를 얻을 수 있습니다. 그러나 VB.NET 컴파일러는 C# 컴파일러처럼 메소드를 공유하도록 강요하지 않으며 클래스를 private로 선언 할 수 없습니다. 따라서 모듈은 훌륭합니다.

+0

+1 모듈에 대해 아주 잘 설명합니다. 나는 VB6에서 3 년간 이주했으며 VB.NET을 5 년 이상 사용해 왔지만이 세부 사항에 많은 관심을 기울이지 않았습니다. 정보 주셔서 감사합니다. –

관련 문제