2009-11-23 6 views
1

나는 vb.net을 처음 사용하여 매우 실망합니다.클래스, 모듈 및 상호 작용에 대한 기본 질문

모든 좋은 프로그래머와 마찬가지로 기능을 기반으로 별도의 파일로 코드를 분할하고 싶습니다. 일부 코드는 양식을 통해 사용자와 상호 작용하고 일부는 현장에서 실험 장비와 상호 작용합니다 (직접적인 사용자 상호 작용 없음). 때로는 사용자가 실험실 장비에 영향을 줄 수있는 무언가를 변경하고 때로는 사용자가 알아야 할 실험실 장비에서 어떤 일이 발생할 수 있습니다. VS를 사용하여 파일을 만들 때 모듈 또는 폼을 선택해야합니다. VS는 다음과와 빈 파일을 생성하거나

공공 클래스 푸

최종 클래스

또는

모듈 푸

엔드 모듈

나는 한 무리가있는 경우 파일, 각 모듈, 모듈로 구성된 루틴을 친구로 정의하면 다른 모듈에서 호출 할 수 있습니다.

모듈 푸

Friend Sub DoSomeWork() 

End Sub 

엔드 모듈은 요금에

코드 푸에 루틴을 호출 할 수 있습니다 -

모듈 요금

Friend Sub Stuff() 

DoSomeWork() 

End SUb 

엔드 모듈

내가 만들 양식, VS cre 클래스를 선택합니다. 클래스에서 모듈에 정의 된 서브 루틴을 호출 할 수 있지만 모듈에서 클래스로 호출하려고하면 호출하려고하는 루틴이 선언되지 않은 오류가 발생합니다. 한 클래스에서 다른 클래스로 호출 할 수도 없습니다. 선언은 내 프로그램 외부의 라이브러리 루틴에만 적용되는 것처럼 보입니다.

나는 여러 가지 온라인 설명과 튜토리얼을 보았지만, 솔직히 이것들을 이해하지도 않고, "기본 클래스로부터 물려받은"그리고 그러한 "설명"에 포함 된 다른 모든 이야기에 관심을 두지 않는다. 내 응용 프로그램을 만드는 데 집중하고 싶습니다. 좋은 생각 - -

내 주요 형태는 처음 "모듈 푸"에서 "공공 부분 클래스 홈페이지를"이름을 변경하여 "메인"이름

내가 메인 클래스로 모든 모듈의 코드를 퍼팅 시도가있는 impossible-를 생성 중복 오류를 찾는다. 나는 Public Partial Class Main으로 정의하고 그들에게 모듈 코드를 넣는 빈 코드 파일을 만들려고 시도했다. - 이것은 Class Main의 코드에서 "Module"코드를 호출 할 수 있었고 (현재는 Main에 있음), 그 반대의 경우도 가능하다. ,하지만 다른 폼 (물론 나는 하나 이상을 가짐)이 자신의 클래스를 갖기 위해 VS에 의해 만들어지고 "모듈"코드가 모듈에서 클래스 메인으로 옮겨지면 다른 폼 (클래스)은 더 이상 코드를 호출 할 수 없습니다 .

코드와 데이터를 공유 할 수 있도록 모듈과 클래스를 정의하는 데 따라야 할 제조법 (모범 사례)이 필요합니다.다른 클래스에서 서브 루틴을 호출 할

아래에서

답변 당신은 단순히 서브 루틴의 이름 앞에 클래스 이름을 넣어해야합니다.

그래서하지

DoSomeWork 여러분 모두가 아니라 나에게 프로그래머 경험이 분명있을 수 있습니다

()

하지만

Foo.DoSOmeWork(). Class-to-Module 호출이나 Class-to-Module 호출에 클래스/모듈 이름을 추가 할 필요는 없으며 Class로 만들어진 호출에만 추가 할 수 있습니다. 개인적으로, 일관성을 유지하기 위해서는 상황이 동일해야한다고 생각하지만, 아마도 일부 객체 지향 (OO) 규칙을 위반하게됩니다. 어쨌든 모두에게 감사드립니다.

+2

이 ... –

+0

내가 제안 당신은 VB를 떠나 C 변종 내용 (의 .NET 이후 C# .NET을하고 당신이 지금까지 배운 것은 C#으로 적용 할 수 있습니다) – Omar

답변

0

일반적으로 하나 이상의 양식이나 양식 및 모듈에서 호출해야하는 기능이있는 경우 기본 모듈에 배치하십시오.

Public Class Form1 
public sub test(i as integer) 
... 
end sub 
end class 

를 다음 클래스를 참조하여 호출 할 수 있습니다 : 당신이 예외적 인 경우가 있고 또 다른 형태 또는 모듈 형태로 함수 또는 하위를 호출해야하는 경우, 당신은 그것을 공개하는 선언 할 수 있습니다 . 서브 이름 :

call form1.test(7) 
+0

고마워요! 고맙습니다! 고맙습니다! – NormD

0

NomD, 모든 좋은 프로그래머

처럼

당신이 참 예 : "설명"그와 다른 모든 까다로운 "기본 클래스에서 상속"에 대한

관심을 가져야

이 wil 나는 당신을 더 나은 프로그래머로 만들고 왜 적절한 코드 구조화가 중요한지 이해하는 시간을내어 더 나은 결과를 얻을 것이다.

+0

그래서 OOP에 대해 알고 있죠? 그래서 왜 모듈에서 수업을 부를 수 없는지 설명해주십시오. – NormD

+0

@NormD : 당신은 꽤 많은 글을 쓰고 여러 번 읽었지만 여전히 문제가 무엇인지 이해하지 못했습니다. 클래스를 인스턴스화하거나 정적 메서드를 호출하는 경우에는 말하기 어렵습니다. 실제 코드와 오류 출력이 유용 할 수 있습니다. –

-1

OOP (Object-Oriented Programming)의 기초를 이해하지 못하는 것 같습니다.

객체 지향적 인 방법으로 응용 프로그램을 설계하는 방법을 배우고 싶지 않으면 응용 프로그램에서 모듈을 작성하면 문제없이 하나의 모듈에서 다른 모듈로 함수를 호출 할 수 있습니다. 그러나 이로 인해 쉽게 유지 보수되고 확장되지 않는 코드가 생성됩니다.

다른 옵션은 OOP에 대한 책을 선택하거나 해당 주제에 대한 과정 또는 자습서를 따라 학습하는 것입니다. 중요한 투자이지만 응용 프로그램이 커질 때 더 우수한 확장 성을 갖춘 강력한 코드가 생성됩니다.

+0

내 애플리케이션을 확장 할 필요가 없으며 유지 관리가 필요하지 않습니다 (프로토 타입). 나는 모듈 만 만들었지 만 폼과 폼을 추가해야만 폼이 클래스로 추가되므로 클래스의 코드를 모듈의 코드와 상호 작용해야합니다. 나는 OOP에 관한 책을 읽었고 튜토리얼을 끝냈다. 그러나 이것들은 항상 실제 작업을 완료해야 할 때 실패하는 추상 레벨의 것들을 처리하는 것처럼 보인다. 나는 모든 것을 제 3의 정상적인 형태로 주장하는 데이터베이스 순수 주의자들을 생각 나게한다 ... 당신이 대답 해 주셔서 감사합니다. – NormD

+0

downvote의 이유 : 질문을 언급하지 않습니다. 덧글에서 더 나았을 것이라는 의견이 더 많습니다. – xpda

+0

xpda : downvote에 대한 이유를 남겨 주셔서 감사합니다. 나는 그의 특정 문제에 대한 설명으로 편집하려했으나 그의 문제를 해결했다는 것을 알았습니다 ;-) –

0

왜 두 주석가가 VB.Net에 문제점이있는 것 같지 않습니다. 두 언어 모두 C#과 VB가 .Net을 기반으로하므로 질문은 언어에 관계없이 동일합니다. 코드는 VB와 마찬가지로 C#으로 잘못 작성 될 수 있습니다. 집에서 언어 전쟁을 떠나십시오. NormD, 귀하의 질문에 대한 대답은 실제로 문제를 더 잘 이해하는 데 필요한 자원으로 안내하는 것입니다. 다음은 약간의 도움이 될 수있는 범위의 문서입니다 - class scope. 당신이 보는 행동을 얻는 이유는 당신이 일하는 것에 기인합니다.모듈 (C#의 정적 클래스와 비슷 함)은 프로그램을 시작할 때 만들어 지므로이를 만들 필요가 없습니다. 따라서 모듈의 메소드를 참조 할 수 있습니다 (예 : module.method). 반면에 클래스는 참조하기 위해 생성해야하는 예외가 있습니다. 따라서 직원 (또는 양식 클래스)을 사용하려면 해당 클래스의 변수를 만들어야합니다. 따라서 dim myemp를 New Employee()로 사용하고 모듈에서 myemp.method()를 호출합니다. 이것은 다소 단순한 설명이므로 자세한 내용은 범위 문서 및 기타 MSDN 문서를 참조하십시오. 나는 다른 포스터들이 좋은 정보를 가지고 추가적인 링크를 올릴 수 있다고 확신한다. 희망이 조금 도움이됩니다. 비주얼 베이직 코더와 같은 음성

웨이드

관련 문제