ㅇ. 윈도우 폼을 상속하여 새로운 폼을 상속함

ㅇ. 프로그램을 통한 상속
-> 상속하고자 하는 폼을 가지고 있는 네임스페이스를 참조
-> 클래스 정의에 상속하려고 하는 폼의 네임스페이스를 추가

Imports Namespace1
Public Class Form2 Inherits Namespace1.Form1

ㅇ. Inheritance Picker 이용 (가장 일반적이고 쉬운 방법)



-> 프로젝트에 Form 추가시에 "상속된폼" 으로 추가를 하면 상속가능한 폼 리스트가 표시되고 상속할 폼을 선택하여 추가하게된다.
-> 추가된 폼에는 상속된 폼에 있는 모든 컨트롤들이 ReadOnly로 표시된다.
-> 해당 컨트롤들을 수정하려면 상속시킬 폼의 컨트롤 속성중 Modifiers를 Public으로 해주고 해당 컨트롤 Event는 Protected로 해준다.

ㅇ. Base Form 컨트롤 보안 레벨
-> 버튼 이벤트에 대한 오버라이딩

상속될 폼
Protected Overridables Sub Button1_Click(ByVal sender As Object, _
ByVal e As System.EventArgs)
Messagebox.Show("This is a base form.")
End Sub

상속된 폼
Protected Overrides Sub Button1_Click(ByVal sender As Object, _
ByVal e As System.EventArgs)
Messagebox.Show(Textbox1.Text)
End Sub


ㅇ. 윈도우 폼에 대한 상속 방법
-> 동일 프로젝트에 있는 폼
: Picker 사용하면 편함
-> 다른 모듈에 있는 폼
: Picker 혹은 Inherite 구문 사용
-> 베이스 폼의 컨트롤 보안 레벨
: 상속 가능 혹은 Midifiers 속성을 이용한 수정
컴터 사양이 딸려서 VS로 작업하기 힘들때 유용하게 사용할수 있을것이다.

아니면.. 걍... 취향따라 쓰던지.. 쩝..


ㅇ. 컴파일러 화일명 : vbc.exe
(닷넷 프레임웍 폴더 확인)

ex)

vbc File.vb (단순 컴파일)
vbc /target:library file.vb (library(dll)로 컴파일)
vbc /out:My.exe file.vb (output file 지정)
vbc /defime:DEBUG=1 /optimize /out:File2.exe *vb (현재 디렉토리에 있는 모든 vb파일을 File2.exe로 최적화 시켜서 컴파일, DEBUG 조건 컴파일)
vbc /target:library /out:Something.dll *.vb (library(dll)로 컴파일 output 파일 지정)



ㅇ. 옵션 :

최적화(Optimization) : /optimize

/optimize[+] 최적화 수행 (안써주면 default)
/optimize- 최적화 수행하지 않음

-. 실행 파일을 작고, 빠르게 만들지만 디버깅이 어렵게 된다.
-. 그러므로 디버깅모드시에는 수행하면 안됨

출력 파일 지정 : /out:filename, /target

-. 이름을 지정하지 않은경우
: .exe는 sub main이 들어 있는 소스코드 파일 이름을 사용
: .dll은 첫번째 소스 코드 파일 이름을 사용

-. /targer 출력파일의 형태를 지정

/targer:exe 실행가능한 콘솔 응용프로그램을 생성
/target:library dll을 만든다.
/target:module 어셈블리에 추가할수 있는 모듈을 생성
: 모든 닷넷 언어에서 가져다가 사용가능
/target:winexe 실행 가능한 윈도우 프로그램을 생성


.NET 어셈블리 : /addmodule, /delaysign, /imports, /keyfile 등

/addmodule:module[,module2] 현재 컴파일 하고 있는 프로젝트에서 사용할수 있도록 지정한 모듈로부터 타입정보를 얻어옴.
/delaysign[+또는-] 어셈블리안에 사인을 함.. /keyfile 혹은 /keycontainer와 같이 사용 (모듈안에 Digital Signature를 삽입)
/imports:namespace[,namespace] 지정한 어셈블리에서 네임스페이스를 가져온다.


디버깅 오류체크 : /debug, /nowarn, /quiet, /removeintchecks 등

/bugreport 버그를 보고하기 쉽도록 여러 정보를 담은 파일을 생성
/debug 디버그 정보를 만들거나 생략 (반드시 알아야할 옵션중 하나)
/nowarn 컴파일시 경고 메세지를 만들지 않는다.
/quiet 문법관련 오류나 경고에 대한 코드를 포시하지 않는다.
/removeintchecks 정수형 오버플로우를 체크하지 않음
/warnaserror 경고를 오류로 표시한다.


선처리(Preprocessor) : /define

/define:symbol=value[,symbol=value] 조건 컴파일을 위해 사용할 상수를 정의

Sub Mytest()
#if debugmode then
'디버그 문장
#Else
'평상시의 코드
#End if

상기 예제에서 define시에 DEBUGMODE=True로 하면 디버그 문장이 False면 평상시 코드가 실행될 것이다.


자원(Resource) : /resource, /linkresource, /win32icon 등

/linkresource 리소스 연결
/resource 어셈블리 모듈안에 리소스 포함
/win32icon 출력 파일에 .ico 파일을 추가
/win32resource 출력 파일에 Win32 리소스를 추가

기타 옵션들 : @, /?, /baseaddress, /main, /nologo 등

/@response_file 컴파일러 옵션과 소스코드 파일들을 명시한 파일(중요)
/? 또는 /help 컴파일러 옵션 표시
/baseaddress dll의 기본 주소를 지정한다.
/main Sub Main 프로시져가 들어있는 클래스를 명시
/nologo 컴퍼일러 배너 정보를 생략
/optionexplicit 변수들을 선언한 후 사용할 수 있도록
/optionstrict 유형에 대한 체크를 강력히 함, 묵시적인 유형변환 금지
/optioncompare 문자열 비교시 바이너리로 할 것인지, 문자로 할 것인지 지정
/recurse 컴파일 할 소스 파일을 가져오기 위해 하위 폴더까지 검색
/rootnamespace 모든 유형 선언에 대한 네임스페이스 지정


ex)

vbc @Response.txt module1.vb
혹은
vbc @Response.txt /out:test1.exe module1.vb

Response.txt 파일 내용 :

/Import:"Microsoft.VisualBasic"
/Import:"System"
/Import:"System.Collections"
/Import:"System.Diagnostics"

-> vbproj 파일안에 Import 부분의 내용
기본 개념.. 따로 정리할 필요는 없을듯..

ㅇ. 구조적인 예외처리
: Try ~ Catch ~ Finally ~ End Try
: 오류 필터링
: 안정적이고 쉽게 오류에 대한 대응
형식)
Try
Try Statements
Catch [exception[As Type]][When expression]
catchstatements
[exit try]
Catch [exception[As Type]][When expression]
catchstatements
[exit try]
....
[Finally
finallystatements
End Try


: Exception 클래스
- 표준 코드와 분리하여 예외를 처리
- 지원 속성 (StackTrace, InnerException, Message,
HelpLink, Hresult, Source, TargetSite)




ㅇ. 비구조적인 오류 처리
: On Error ~
: 프로시져 내에서 오류처리
: 프로그램 속도 저하
: 디버그나 유지 보수가 어렵다.

형식)
On Error GoTo Line (or Label)

On Error Resume Next

On Error Goto 0 (에러처리 안함)

On Error Goto -1 (에러처리 루틴이 활성화 되어 있으면 Off 시킴)


: Err 개체
- 에러 발생시 에러 정보를 가진다.
- Raise 메서드 -> 일부러 Run-time 에러 발생
- Clear -> 강제로 Err 개체를 Reset


ㅇ. 오류의 종류
: 문법 오류 (Syntax Error)
: 실시간 오류 (Run-time Error)
: 로직 오류 (Logic Error)


Sample)

Try
Devide = Cint(First/Second)
carch when Second = 0
msgbox("Devide by Zero")
Finally

End Tty

+ Recent posts