System.Web 어셈블리에

System.Web 네임스페이스에

HttpUtility 클래스를 사용하면 된다.

 

  • UrlDecode ━ URL 인코딩
  • UrlEncode  ━ URL
  • 대개 일반적으로 서버 - 클라이언트의 프로그램을 작성한다 이를 투티어(Two-tier) 응용프로그램이다.

    이외에 다 계층 프로그램을 작성시

    Business 티어에서 사용하는 방법 중의 하나가

    .Net 리모팅이다.

    이전에 웹 서비스도 마찬가지로 다계층 방식으로 응용 프로그램 작성시

    Business 티어 에서 사용하는 한 방법일 뿐이다.

     

    그럼 리모팅이 무엇인지 알아보자.

    서로 다른 어플리케이션 간에 객체나 메소드에 접근하는 분산 객체 기술이다.

     

    다은음 기본적인 동작을 흐름도로 표시했다.

     

     

    -마샬링

    a에서 b로 객체의 메소드 호출시

    메소드 호출에 필요한 전달 인수와, 또는 반대로 결과값 등을 묶어서

    전달하는 것을 마샬링이라한다.

    -참조에 의한 마샬링은 두 응용프로그램이 같은 도메인 즉 같은 컴에

    존재하는 경우

    -값에 의한 마샬링 두 응용 프로그래이 서로 다른 도메인에 있는 경우

    사용되며, 객체의 직력화가 필요하다.

     

    포매터

    두 응용프로그램 간에(도메인) 마샬링된 값이 전달될때

    마샬링된 값은 메세지로 변환되어 전송이 되는대

    이 메세지로 변환하는 작업을 하는것이 포매터이다.

    포매터에는 SOAP 포매터와 바이너리 포매터가 있다.

     

    채널

    위 포매터에 의해서 생서된 메세지가 전달되는 통로를

    채널이라하면 HTTP 채널과 TCP 채널이 있다.

    포매터를 지정하지 않으면

    HTTP 채널에는 SOAP 포매터가 사용되며

    TCP 채널에는 바이너리 포매터가 사용된다.

     

    -프록시

    -메시지 싱크(언마샬링)

    -호스팅 어플리케이션

    원격 객체는 객체이기 때문에 클라이언트의 요청을 받아 원격 객체의 소멸과 생성을 하는 대리인이

    필요한대 이것을 해주는 것이 호스팅 어플리케이션이다.

    여기서는 채널,포매터,원격 객체의 활성화 모드를 설정한다.

     

    정리하면 리모팅은

    서버 ----------- 호스팅 어플리케이션 ---------- 클라이언트라고 보면 된다.

    나머지 내용들은 내부적으로 처리되는 내용들이다.

     

    활성화란 원격 객체가 생성되어 원격 호출을 받을 준비가 된 상태를 말하며

    여기에는 서버 활성화와 클라이언트 활성화가 있다.

    서버 활성화에는 또다시 SingleCall과 SingleTon이 있다.

    서버 활성화는 원격 객체의 생성과 소멸을 시점을 결정한다.

    SingleCall은 같은 클래스 원격 호출이 이루어질때마다 객체가 따로 생성이된다.

    즉, 클라이언트 메소드가 호출될 때마다 원격 개체가 생성이되며,

    객체의 상태가. 유지 되지 않는다.

    SingleTon은 같은 클래스 하나의 객체만 생성이되고, 원격 호출을 모두 이 객체가 처리한다.

    즉, 서버에는 오로지 하나만의 객체가 생성이 되며 이 소멸은 서버가 저하며, 클라이언트가 얼마가 되었든

    그것과 무관하게 서버의 하나의 클래스에는 하나의 개체만 생성이 된다. 따라서 각 클라이언트는 같은 객체를

    공유하게 된다.

    다음 이미지는 SingelTone과 SingeCall의 차이이다.

     

    전자는 Singlecall이고 후자는 SingleTone이다.

     

    클라이언트 활성화는 원격 객체의 활성화를 클라이언트가 결정한다,

    즉 클라이언트에서 객체를 생성하면 바로 원격 객체하나가 생성되고,클라이언트에서 참조가 끝나면

    바로 원격 객체가 소멸된다. CAO(Client Activeate Object) 모드라고 한다.

     

    서버 활성화 방법

    -원격 개체

    원격 개체는 새 프로젝트에서 클래스 라이브러리(DLL) 선택하여 프로젝트를 생성한다.

    원격 개체의 클래스는 System.MarshalByRefObject를 상속받아야만 한다.

     

    - 호스팅 프로그램

    참조에서 원격 개체 프로젝트를 추가한다.

    System.Runtime.Remoting을 추가한다.

     

     

    window Form 응용프로그램을 시작하고

    웹서비스를 참조하게 되면

    해당 프로젝트가 저장되는 폴더의

    Web Reference 폴더 아래의 참조 Namesapce명의 폴더 아래

    Reference.vb라는 파일이 있다.

     

    이 파일에는 참조하는 웹서비스에 대하여 자동으로 생성된

    추가적인 메소드들이 들어있다.

     

    웹서비스 메소는 HelloWord였는대

    추가적인 이벤트 HelloWorldCompleted

    추가적인 메소드 HelloworldAsync,OnHelloWorldOperationCompleted

    가 자동으로 생성되어있다.

     

    HelloWord를 직접 호출하게 되면 동기 호출이 되고

    결과가 반환될때까지 실행은 중지상태가 된다.

     

    HelloWorldAsync를 호출하게 되면 비동기 호출이 되며

    호출 뒤에 그 다음이 코드가 바로 실행이 되며

    웹서버로 HelloWorld메소드에 호출에 대한 응답이 완료되면

    HelloWorldOperationCompleted 이벤트가 발생된다.

     

     

    또 다른 방법으로는

    VB.Net에 자동으로 생성되는 코드로

    Begin웹메소드명, End웹메소드명으로 생성되는 방식의 코드도 있다.

    Begin으로 시작하는 메소드는 비동기 호출을 시작하는것이고

    End로 시작하는 메소드는 비동기 호출 작업을 종료하는 것이다.

     

    위 이미지와 같이 Begin,End로 시작하는 메소드가 자동으로 생성되는 방식이라면

    비동기 대리자를 사용하여 처리하면 된다.

     

    그러면 HelloWorld에 대한 비동기 호출을 지원하기 위한 VB.Net이 자동으로 생성한 코드로

    BeginHelloWorld와 EndHelloWorld가 생성이 되있다고 가정하자.

    또한 이런 방식의 코드에는

    System 네이스페이스에

    비동기 작업 종료시 메소드를 호출하기 위한 AsyncCallback 대리자와

    웹메소드가 전달된 값고, 비동기 호출 작업 진행 상태를 알기 위한 IAsyncResult 인터페이스가 필요하다.

     

    코드는 다음과 같다.

    Dim Ws As New Test.Test

    Dim Cb As New AsyncCallback(AddresOf EndWebService)

    dim St As IAsyncResult

     

    St = BeginHelloWorld(Cb,Ws)

     

    Public Sub EndWebService(ByVal ar as IAsyncResult)

    dim Ws As Test.Test

     

    Ws=ar.AsyncState

    MsgBox(Ws.EndHelloWorld(ar))

    End Sub

     

    우선 웹참조한 개체를 선언한다.

    Dim Ws As New Test.Test

     

    다음은 비동기로 호출할 작어에 대한 종료 메소드를 호출할 대리자를 선언한다.

    Dim Cb As New AsyncCallback(AddresOf EndWebService)

    비동기 호출 작업이 종료될때 호출할 메소드는 EndWebService이다.

    AsyncCallback 대리자 호출할 메소드는 형식은

    Public Sub 메소드명(ByVal ar as IAsyncResult)

    ar은 비동기 호출 작업 상태를 얻을수 있다.

     

    다음은 비동기 작업 상태를 확인하기 인터페이스 변수를 하나 선언한다.

    dim St As IAsyncResult

     

    이제 준비 단계는 끝났다.

     

    비동기 호출을 해보자.

    이전에 말했듯이

    비동기 호출을 하기 위해서는 Begin으로 시작하는 메소드를 호출하면 된다.

    St = BeginHelloWorld(Cb,Ws)

    여기서 인수 마지막에서 두번째는 비동기 작업시 사용할 대리자를 지정하고

    마지막에서 첫번째는 비동기 호출 메소드가 포함된 개체를 지정한다.

    반환은 비동기 작업 상태를 확인할수 있는  IAsyncResult 인터페이스를 갖는 개체를 반환한다.

     

    비동기 호출이 진행이 되었으니

    웹 메소드의 작업이 완료되면

    비동기 호출 대리자에 할당한 메소드가 호출이 된다.

     

    그 대리자에서 넘어오는 인수 값도 역시

    비동기 작업 상태를 확인할수 있는  IAsyncResult 인터페이스를 갖는 개체를 반환한다.

    이 개체에서 AsyncState 속성을 참조하게 되면

    비동기 호출 메소드가 포함된 개체를  얻을수 있다.

    dim Ws As Test.Test

          Ws=ar.AsyncState

     

    마지막으로 비동기 작업을 종료하는 메소드를 호출해주어야 한다.

    Ws.EndHelloWorld(ar)

    바로 End로 시작하는 메소드를 호출하면 된다.

    인수로는 메소드에 전달된 비동기 작업 상태를 나타내는 개체를

    지정하면 된다.

    반환은 웹메소드 호출 결과를 반환한다.

    MsgBox(Ws.EndHelloWorld(ar))

     

    다음은 폼 로드 이벤트에 웹 메소드를 비동기,동기로 호출했을때의 차이이다.

     비동기 호출하게 되면 창이 보이고 메세지 박스도 같이 보인다.

     그러나 동기 호출하게 되면 메세지 박스가 우선 표시된 후에

    확인 버튼을 누른 후에에 비로서 폼이 보인다.

    먼저 기본 Form Widnow 응용프로그램을 시작한다.

    솔루션 탐색기에서 솔루션명에서 오른쪽 버튼을 누른다.

    다음과 같음 메뉴가 표시되면

     

    웹 참조 추가 메뉴가 따로 없기 때문에 서비스 참조 추가를 선택한다.

    그러면 다음과 같은 창이 뜨면

     

    하단의 고급 버튼을 클릭하면 다음과 같은 창이 뜬다. 

     하단의 웹 참조 추가 버튼을 클릭하면 다음 이미지와 같은 창이 뜬다.

    여기서 상단의 임지처럼 URL 옆의 텍스트 박스에 해당 웹서버/가상 디렉토리/asmx파일명을 지정한다.

    정확한 경로라면 이미지 처럼 해당 웹서비스(클래스)에 대한 외부에 공개된 메소드가 표시된다.

    오른쪽의 웹 참조 이름을 프로젝트에서 사용할 이름을 지정한다.

    그리고 참조 추가를 선택한다.

     

    다음 이미지는 솔루션 탐색기 웹참조가 추가된 상태의 이미지 이다.

     

    Web Reference 아래 웹서비스가 추가된것이 보인다.

     

    아래 이미지 처럼 아주 간단한 소스를 통하여 웹서비스에 접근할수 있다.

    웸참조명.클래스명

     

     

    여기서 웹 서비스 사용시에

    노출된 메소드를 그냥 호출하게 되면 동기 상태로 호출된다.

    즉 호출하는 시점에 프로세스는 일시 정지가 된다

    웹 메소드의 실행이 끝날때까지 실행으 호출 시점에서 제어권은 웹 메소드로 넘어가며

    웹 메소드의 실행이 종료가 웹 메소드에서 제어권을 바당 다시 하위 코드들이 실행된다.

     

    따라서 작업이 오래 걸리는 웹 메소드라면 프로세스가 일시 중지된 상태처럼 보인다.

    이를 개선하기 위한 비동기 호출로 웹섭스를 사용하는 방법을 알아보자.

    웹서비스란

    웹서버에서 구동되서 외부에서 접근가능한 네임스페이스를 갖고 메소드를 지원하는 서비스를 말한다.

     

    Visual Studio 2010의 vb.net에서 웹 서비스를 만들어보자.

     

    우선 웹서비스를 만들기 위해서는 웹서버가 필요하다.

    iis를 설치한다.

    제어판에서 윈도우 설치 관련 항목을 선택해

    IIS를 선택하여 설치한다.

     

    Visual Studio 2010의 vb.net을 시작한다.

     

    파일 메뉴의 새 웹 사이트를 선택한다

     

    메뉴를 선택하게 되면 다음과 같은 창이 뜬다

     

    이 창에서 상단에 Net Framework를 선택하는 박스가 보이는대 이 박스에서

    Net Framework 2.0.3.0 3.5 중 하나를 선택해야 웹 서비스 항목이 표시된다.

    중앙에 ASP.Net 웹 서비스를 선택하고

     

    하단의 URL 입력창에 웹서버의 디렉토리를 지정해 줄수 있다.

    여기서 WebSite 대신에 다른 이름으로 지정하고 확인을 누르게 되면

    웹 서버에 지정한 이름으로 가상 디렉토리가 생성이 된다.

     

    이렇게 가상 디렉토리가 생성되는것이 싫으시면

    찾아보기를 사용하여 웹서버의 디렉토리를 선택할수 도 있다.

     

    확인 버튼을 누른다.

    그러면 웹 서비스 기본 골격이 표시된다.

    솔루션 탐색기는 다음과 같이 표시된다.

     

    기본 코드는 Service.vb에 작성한다.

    Service.vb에 기본 골격 내용은 다음과 같다.

     

    Namespace에 할당할 이름과

    외부에 노출할 메소드는 메소드 앞에 <WebMethod()> 특성을 지정하고, Public로 함으로서

    왜부에 놓출할수 있다.

    저장하고 컴파일한다. 오류가 없개

    그리고 솔루션 파일은 문서 밑의 Visual Studio 10의 프로젝트 밑에 저장된다.

     

    한가지 더

    다음 이미지는 service.asmx의 내용이다.

     

    끝에 Class의 할당된 문자열은 Service.vb에 포함된 클래스명과 동일해야 한다.

     

    이로서 웹서비스는 준비가 되었다.

    다음번에는 이 웹서비스를 사용항 윈도우 응용프로그램을 만드는 방법을 알아보자.

     

     

     

    어셈블리(exe나 dll)은 전용 어셈블리와 공유 어셈블리로 나윈다.

    전용 어셈블리는 하나의 응요프로그램에서 사용하기 위한 어셈블리이며

    공유 어셈블리는 여러개의 응용 프로그램에서 사용할수 있도록 만들것을 공유 어셈블리라고 봄다.

     

    아무 설정도 하지 않고 어셈블리를 만들개면 그 어셈블리는 전용 어셈블리이다.

     

    공유 어셈블리는 전용 어셈블리와 같은 방식으로 만든 후에 3가지의 추가적인 처리가 필요하다.

     

    또한 전용 어셈블리를 사용하는 경우는 사용하는 응용프로그램의 bin 디렉토리에 전용 어셈블리가 복사되나.

    공유 어셈블리는 여러 응용프로그램이 사용해도 어셈블리 캐쉬에 1개만 존재한다.

     

    1. 명령 프롬프트에서 sn 명령을 사용하여 공개키(*.key) 파일을 생성한다. 이 파일은 어셈블리명이 유일하도록 한다.

     

    2. 개발 환경에서 AssembleInfo.vb 파일에서(언어마다 해당 응용프로그램의 어셈블리 정보를 포함하는 파일)

        1번에서 생성한 키 파일을 설정해 주어야 한다.

        속성 AssemblyKeyFile에 1번에서 생성한 파일의 경로를 지정한다.

        그리고선 우선 컴파일한다.

     

    3. 생성된 파일을 어셈블리 캐쉬에 등록해야 한다. 이 위치는 윈도우 설치 폴더의 assembly 폴더이다.

       그냥 생성한 파일을 위 폴더에 복사하면 된다. 삭제도 단순히 파일을 삭제하면 된다.

     

    IDE 환경에서는 다중 파일 어셈블리를 만들수가 없다.

    따라서 콘솔(명령 프로프트) 상에서 만들어야 한다.

    콘솔 창은 다음과 같이 뛰운다. 

    위 이미지와 같이 자신의 PC에 설치된 visual studio에 따라서

    툴 메뉴의 명령 프롬프트 메뉴를 선택하면 콘솔창을 열수 있다.

     

    다중 파일 모듈을 만들기 위해서는

    모듈 파일이 필요한다.

    이는 텍스트 파일에 코드를 적어주면 된다

    namespace ~

        class ~

           코드

       end class

    end namespace

    이런 식으로 작성하고 확장자를 vb로 하여 저장한다.(a.vb라 칭한다)

     

    이 파일을 컴파일하여 확장자가  netmodule로 된 파일을 얻어야 한다.

     

    우선 콘솔 창을 연다.

    코드가 vb.net 코드이므로

    vbc를 사용한다.

    vbc /t:module a.vb를 적어주면

    a.netmodule라는 파일이 생긴다

    이는 모듈 파일이다.

    모듈 파일은 메니페스트가 존재하지 않는으므로 독자적으로 실행될수 었다.

    메니페스트가 존재하는 파일에 포함이 되어야만 실행을 할수 있다.

     

    그런 메니페스트가 있는 파일과, 생성한 모듈 파일을 포함해 보자.

     

    이 파일도 마찬가지로 모듈 만들때와 같이 텍스트 파일로 작성한다.(b.vb라 칭한다)

     

    모듈을 포함하는 컴파일은 다음과 같이 한다.

    vbc /t:library /addmodule:a.netmodule /out:c b.vb

     

    /t:library이기 때문에 dll 파일이 생성되므로 c.dll 이라는 파일(어셈블리)이 생성된다.

    시작-해당 stuio 메뉴-툴-명령 프로프트 실행

    ildasm

    창이 하나 뜨면 파일 메뉴에 열기에서 자신의 결과물(exe,dll)을 선택하면

    그 결과물에 대한 정보를 볼수있다

    메니페스트,네임스페이스,메타 데이타,등의 정보를 확인할수 있다.

    DllImport는 System.Runtime.InteropServices.DllImportAttribute 개체를 생성하며

    외부 DLL의 이름이나 서수를 메서드와 연결시킨다.

     

    <DllImport("wininet.dll", SetLastError:=True, _
           CharSet:=CharSet.Auto, _
           EntryPoint:="FindFirstUrlCacheGroup", _
           CallingConvention:=CallingConvention.StdCall)> _
        Shared Function FindFirstUrlCacheGroup( _
                ByVal dwFlags As Int32, _
                ByVal dwFilter As Integer, _
                ByVal lpSearchCondition As IntPtr, _
                ByVal dwSearchCondition As Int32, _
                ByRef lpGroupId As Long, _
                ByVal lpReserved As IntPtr) As IntPtr
        End Function

     

    이는 wininet.dll에 FindFirstUrlCacheGroup 이름의 함수를 Shared Function FindFirstUrlCacheGroup 함수에 연결시킨다.

    따라서 Shared Function FindFirstUrlCacheGroup 함수를 호출하게 되면 wininet.dll의 FindFirstUrlCacheGroup을 호출하게 된다.

    Switch 함수를 그냥 사용하면 에러가 표시된다.

    이를 위해서는 Switch 함수를 포함하는 모듈명을 적어주어야 한다.

    Interaction.Switch 와 같이

     

    다른 함수나,메서드을 사용할때

    정확하게 기제했는대 에러가 나면

    해당 함수,메서드가 포함된 모듈이나 클래스명을 적는다

    그래도 에러면 네임스페이스까지 적는다.

    visual studio의 도구 메뉴의 옵션 메뉴를 선택하면 아래 이미지 같은 창이 하나 뜬다.

    이 창에서 환경의 글꼴및 색에서 표히 항목의 색을 변경하면 된다.

    vb.net에서 이벤트를 처리 하는 방법은 두 가지가 있다.

    그중 한가지는 이벤트를 가지는 개체를 담을 변수를

    withevents와 같이 선언하면 그 변수를 사용 이벤트 처리를 할수 있다.

     

    다음은 일반적인 이벤트 처리 구문이다.

    Private Sub Form1_Load(ByVal eventSender As System.Object, ByVal eventArgs As System.EventArgs) Handles MyBase.Load

     

    여기서 vb6와 같은 Form1_Load가 있다

    vb6에서는 이것이 의미를 가진다. Form1이라는 개체에 Load 이벤트가 발생하면 처리하는 이벤트 프로시저라는것을 나타태나

    vb.net에서 아무런 의미가 없다. Form1_Load를 사용자가 원하는 프로시저명으로 해도 관계없다.

     

    다은 인수로 ByVal eventSender As System.Object, ByVal eventArgs As System.EventArgs 와 같이 구문에 표시되어 있는대

    vb.net에서는 이벤트에 항상 2개의 인자가 전달된다.

    전자는 (여기서는 ByVal eventSender As System.Object)은 이 이벤트를 발생된 개체를 나타낸다.

    후자는 (여기서는 ByVal eventArgs As System.EventArgs)은 이 이벤트 발생에 추가적인 정보들을 담은 개체가 전달된다.

     

    다음으로 Handles이다.

    어떤 이벤트가 발생될때 이 프로시저를 처리할지 지정한다.

    여기서는 Handles MyBase.Load 와 같이 기술되어 있는대

    이는 이 개체의 부모 개체에 Load 이벤트가 발생되면 이 프로시저를 실행하게 된다.

    Handles 뒤에 , 를 사용 여러개의 이벤트를 서술할수 있다.

    아래 링크는 Visual Studio 2010에서 크리스탈 레포트를 사용하기 위한 유듀브 동영사이다.

    Crystal Reports Visual Studio 2010 사용하기

     

    새 프로젝트를 시작

     

    새항목 추가에서 크리스탈 레포트 템플릿을 추가하면

    크리스탈 레포트를 다운받을수 있는 링크가 표시되면

    표시된 링크에서 크리스탈 레포트를 다운받아 설치하면 사용할 수 있다.

     

    크리스탈 레포트의 필드를 설정한후에

    폼에 크리스탈 레포트 뷰어 컨트롤이 표시되어야

    뷰어를 폼과 크리스탈 레포트와 연결할 수 있는대

    이것이 도구모음에 표시되지 않는다.

     

    이것은 프로제트 속성에

    대상 프레임워크 항목을 Net Framework 4로 바꾸면

    도구 모음에 표시된다.

     

    C#은 유튜브 영상에 나온것처럼 설정하면 된다.

    Visual Basic는 프로젝트 속성 창에서

    컴파일 탭의 제일 하단의 고급 컴파일 옵션 버튼을 누른다

    고급 컴파일 옵션창이 보이면

    제일 하단의 대상 프레임 워크를 NET Framework 4로 변경하면

    크리스탈 레포트 뷰어가 표시된다.

     

    클래스는 어떤 개체를 생성하기 위한 틀이다.
    인스턴스란 클래를 기본으로 생성한 개체를 말한다
    인스턴스=실체=오브젝트=객체 같은 말이다.

    상속이란 한 글래스가 다른 클래스에게 자신의 멤버를 물려주는거
    여기에는 상속을 해주는 부모 클래스와, 상속을 받는 클래스 자식 클래스(또는 파생 클래스)가 있다.

    InHerits는 기본 클래스를 지정한다.
    MustInHerits는 해당 클래스는 인스턴스를 행성할수 없고, 이클래스를 상속한 자식 클래스의 인스턴스만 생성할수 있다. 이를 추상 클래스라고 한다.
    NotInHeritable는 상속이 되지 않는 클래스를 말한다, 즉 자식 클래스를 만들수 없는 클래스이다. 이를 봉인 클래스라 한다.

    Is-a 상속 관계는 A 클래스는 B클래스이다. 이런 상속 관계(명시적으로 클래스를 상속 한다는 것을 지정해야 한다)
    has-a 상속 관계는 A 클래스는 B클래스를 포함한다.(명시적으로 클래스 상성을 지정하지 않고, 클래스 내에서 포함할 클래스의 개체를 생성하고,사용하는 것을 말한다)

    개체를 참조시 개체 변수형이 부모 클래스 인경우에는 자식 클래스를  부모 클래스에 가능하나, 개체 변수형이 자식 클래스 형일 경우일 때, 부모 클래스를 자식 클래스에 할당하는 것은 불가능하다.

    가상메소드: 자식 클래스들이 똑같은 메소드를 갖고 있으나 부모 클래스는 그 메소드가 없을 경우에,
    수천개의 자식 개체를 생성했다고 가정 때,
    가상 메소드가 없다면 일일이 자식 개체의 메소드를 호출해 주어야 한다.
    그러나 가상 메소드를 사용한다면 간단하게 루프를 돌릴수 있다.
    위에서도 말했듯이 자식 클래스는 부모 클래스형 변수에 참조 시킬수 있다라고 했다.
    따라서 부모 클래스 변수의 배열을 선언하고, 생성한 자식 클래스의 개체를 참조시킨다.
    그러나 아직 가상 메소드를 사용하지 않았기 때문에 자식 클래스에는 다 같은 이름으로 있는 메소드인데, 부모 클래스에는 그런 이름의 메소드가 없는 메소드를 호출하려면, CType으로 형변환을 한 후에 자식 메소드를 호출해주어야 한다.
    마찬가지로 루프를 돌릴수 없다.
    그러면 가상 메소드를 사용해보자.
    부모 클래스에 가상메소드에서 똑같은 이름으로 사용하는 메소드를 부모 클래스에서 Overridable 함께 선언을 하고. 자식클래스의 메소드에는 Overrides를 지정하게되면, 가상 메소드를 호출하게 되면, 부모 클래스 변수에 할당된 개체의 형에 따라서 그 클래스의 메소드를 호출하게 된다.

    확장메소드는 클래스의 멤버를 확장시켜 준다. 확장메소드 지정은 모듈에서 지정해야 한다.
    다음과 같은 Imports System.Runtime.CompilerServices 구문이 필요하다.

    <Extension()>
    Public Sub DisplayString(ByVal obj As String) As String
       console.writeline(obj)
    End Function

    위 구문은 해당 프로젝트에서 String 클래스의 메소드에 DisplayString이라는 확장 메소드를 추가한다.
    String 개체.DisplayString로 사용할수 있다.

    확장 메서드(Visual Basic)
    리터럴(liternal) 형식 문자는 상수에 지정하며 이 상수는 어떤 자료형이다를 지정한다.
    VB.NET에서는 정수는 Integer 형식으로 표현 가능한 수치 이면 Interger로 그 이상이면 Long형으로 취급된다. 그런데 상수가 너무 커서 Long형 자료형에는 포함 할수 없고, Decimal 자료형에 포함할수 있는 상수인 경우 리터널 형식 문자를 지정하지 않으면 Decimal 자료형에 지정할수 없고 오버플로가 발생한다. 따라서 이런 상수를 지정을 할려면 리터널 형식 문자를 지정하여야 한다

    또한 실수 같은 경우는 무조건 Double로 취급이된다. 그런데 상수가 너무 커서 Double형 자료형에는 포함 할 수 없고, Decimal 자료형에 포함할수 있는 상수인경우, 리터널 형식 문자를 지정하지 않으면, 아무리 수를 크게 써도 Double 자료형에 저장될수 있도록 툴이 소숫점 이하의 수치를 제한을 한다, 따라서 이런 상수를 지정을 할려면 리터널 형식 문자를 지정하여야 한다

    리터널 형식 문자는 다음과 같다.
     S  Shor
     I  Integer
     L  Long
     D  Decimal
     F  Single
     R  Double
     C  Char

    리터널 형식 문자가 Singe와 Double만 자료형의 선두 문자를 쓰지 않고, 나머지 자료형은 자료형의 선두 문자를 사용한다.

    다음 표에서는 Visual Basic에서 사용할 수 있는 묶기 문자와 형식 문자를 보여 줍니다.

    데이터 형식

    묶기 문자

    추가된 형식 문자

    Boolean

    (없음)

    (없음)

    Byte

    (없음)

    (없음)

    Char

    이때

    C (중요)

    Date

    #

    (없음)

    Decimal

    (없음)

    D 또는 @

    Double

    (없음)

    R 또는 #

    Integer

    (없음)

    I 또는 %

    Long

    (없음)

    L 또는 &

    Short

    (없음)

    S

    Single

    (없음)

    F 또는 !

    String

    이때

    (없음)

    CTS는 닷넷 프레임 워크에서 사용되는 모든 언어들이 지원할 수 있는 자료형들을 말한다.
    vb.net이나 c#, j# 등의 언어에서 사용할 수 있는 자료형들의 규칙이라고 할가.
    각 언어에서는 이 자료형을 직접 쓰기 보다는 이 자료형을 대신해서 사용할수 있는 단어로 지정해 놓고 있다.

    다음은 CTS에서 타입 종류이다.



    http://wvbiz.tistory.com/1

    + Recent posts