달력

02

« 2012/02 »

  •  
  •  
  •  
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  •  
  •  
  •  

'c#'에 해당되는 글 5

  1. 2008/04/27 닷넷 전용 어셈블리
  2. 2008/04/27 델리게이트(1)
  3. 2008/04/27 C# 전처리기 지시문
  4. 2008/04/27 기초 C# - 제너릭
  5. 2008/02/19 Interface
2008/04/27 00:38

닷넷 전용 어셈블리 General .NET2008/04/27 00:38

2006년 10월 31일자 글이고, 기존의 네이버 블로그를 폐쇄하고, 가져온 글입니다.

 

l         어셈블리 전용(Private) 또는 공유(Shared) 형태로 배포됨.

l         전용과 공유의 차이점 명명 규칙과 버전관리 정책

 

l         전용 어셈블리의 특징

n         배포된 응용 프로그램에 의해서만 이용될 수 있는 모듈들의 집합.

n         해당 형식들을 소유하는응용 프로그램만이 이 형식들을 사용할 수 있고 시스템의 다른 응용 프로그램과 공유하지 않게 한다는 것을 의미.

n         클라이언트 응용 프로그램과 동일한 디렉토리(응용 프로그램 디렉토리)나 그 하위 디렉토리에 있어야 함.

n         전용 어셈블리의 resolution과 로딩은 어셈블리가 위치한 응용 프로그램 디렉토리(bin 디렉토리)에서 일어난다. 옮겨도 실행됨.

n         삭제를 하여도 머신의 다른 응용 프로그램에는 손상을 주지 않음.

 

l         전용 어셈블리 프로빙(기초)

n         프로빙 외부 어셈블리 참조자를 정확히 상응하는 바이너리 파일에 매핑하는 과정

n         프로빙이란?

u        닷넷 런타임이 어떤 모듈의 매니페스트로부터 .assembly extern CarLibrary 라는 라인을 읽게 되면 CarLibrary.dll이라는 이름의 파일을 검색한다. 이 때 이 파일을 검색할 수 없게 된다면 *.exe 버전을 검색하게 된다. 이 두 파일이 모두 검색되지 않으면 런타임 예외를 발생시킨다. 그러나 XML 구성 파일(*.config)을 이용하게 되면 런타임이 응용 프로그램 디렉토리 밖의 다른 위치에 에서 프로브하게 할 수 있다.

 

l         전용 어셈블리 식별하기

n         전용 어셈블리 식별자 문자열 이름과 숫자 버전으로 구성.

n         문자열 이름 어셈블리의 매니페스트를 포함하는 바이너리 모듈의 이름에 기초해서 만들어진다.

Ex) CarLibrary.dll 어셈블리의 매니페스트

.assembly CarLibrary

{

….

.ver 1:0:454:30104 ß--- 버전 번호는 다를 수 있다.

}

어셈블리의 버전 정책은 닷넷 런타임이 어셈블리를 로딩할 때 적용하려 하지 않을 것이다. 그 이유는 이 전용 어셈블리를 알고 있는 것은 바로 해당 클라이언트 응용 프로그램밖에 없기 때문이다. 그렇기 때문에 전용 어셈블리에 대해서는 정확한 버전 검사를 할 필요가 없는 것이다.

 

 

Reference

1. Part3 .NET 어셈블리를 이용한 프로그래밍, 9장 .NET 어셈블리, C# and the .NET Platform, p.440~442

'General .NET' 카테고리의 다른 글

닷넷2.0을 시작하며...  (0) 2008/07/22
세티의 닷넷강좌를 다시 살리겠습니다.  (0) 2008/07/22
닷넷 전용 어셈블리  (0) 2008/04/27
델리게이트(1)  (0) 2008/04/27
C# 전처리기 지시문  (0) 2008/04/27
기초 C# - 제너릭  (0) 2008/04/27
Posted by -세티-
2008/04/27 00:37

델리게이트(1) General .NET2008/04/27 00:37

2006년 10월 27일 작성된 글이며, 네이버 블로그를 폐쇄하고, 가져온 글 입니다.

1. 닷넷 델리게이트

-         응용 프로그램 내에 있는 다른 메소드를 가리키는 객체

1.1 델리게이트가 포함하는 3가지 중요한 정보

-         델리게이트가 호출하는 메소드 이름

-         이 메소드의 인수

-         이 메소드의 반환값

1. 2 닷넷 프레임워크에서는 동기 델리게이트와 비동기 델리게이트를 이용하는 것이 가능.

 

2. C#에서 델리게이트 정의하기

-         delegate 키워드를 사용.

-         내부적으로 System.MulticastDelegate로부터 파생되는 봉인 클래스가 생성됨.

Ex) public delegate void PlayAcidHouse(Person theDJ, int volumn);

sealed class PlayAcidHouse : System.MulticastDelegate

{

         public PlayAcidHouse(object target, unit functionAddress)

         public void Invoke(Person theDJ, int volumn)
         public IAsyncResult BeginInvoke(Person theDJ, int volumn, AsynCallback cb, object state)
         public void EndInvoke(IAsyncResult result)

}

 

-         PalyAcidHouse 클래스에는 자동적으로 3개의 public 메소드가 만들어짐.

-         Invoke() : 델리게이트에게 현재 지시하고 있는 메소드를 호출할 때를 알리기 위해서 호출, C#에서 직접 호출 불가능

-         BeginInvoke(), EndInvoke() 는 비동기 호출하는데 이용

'General .NET' 카테고리의 다른 글

세티의 닷넷강좌를 다시 살리겠습니다.  (0) 2008/07/22
닷넷 전용 어셈블리  (0) 2008/04/27
델리게이트(1)  (0) 2008/04/27
C# 전처리기 지시문  (0) 2008/04/27
기초 C# - 제너릭  (0) 2008/04/27
닷넷의 소켓 클래스  (0) 2008/04/11
Posted by -세티-
2008/04/27 00:35

C# 전처리기 지시문 General .NET2008/04/27 00:35

2006년 8월 13일자에 작성된 글이며, 기존 네이버 블로그를 폐쇄하기 위해 가져온 글 입니다.

최초 작성자 세티
최초 작성일 2006년 8월 13일 일요일
최종 수정일
최종 수정자
C# '전처리기' 지시문

정의 : 컴파일 과정을 제어하기 위해서 사용됨.

C# 전처리기 지시문
#define, #undef - 조건부 컴파일 기호를 정의하거나 정의를 해제 하는데 이용.
#if, #elif, #else, #endif - 소스 코드의 일부를 조건적으로 건터뛰는데 이용.
#line - 에러와 경고의 줄 번호를 제어하는데 이용.
#error, #warning - 해당 빌드에 대한 에러와 경고 생성하는 데 이용.
#region, #endregion - 소스 코드의 일부를 명시적으로 표시하는데 이용.
- 표시된 영역 안의 코드는 확장, 축소 될 수 있다.


#region, #endregion 를 이용하여 코드 영역 지정하기
#region 전처리기를 이용한 코드 영역 지정하기
public class Class1
{
   //내용
}
public interface Interface1
{
   //내용
}
#endregion

조건부 코드 컴파일하기
- #if, #elseif, #else, #endif 를 사용하여 코드 블록을 조건적으로 컴파일 하게 한다.
using System;
using System.Collections.Generic;
using System.Text;
namespace CSharpConsole
{
    class Program
    {
        static void Main(string[] args)
        {
            #if(DEBUG)
            #warning 경고! Debug가 정의되어 있음. 릴리즈 빌드로 구성하시오.
            Console.WriteLine("App directory:{0}", Environment.CurrentDirectory);
            Console.WriteLine("Box: {0}", Environment.MachineName);
            Console.WriteLine("OS: {0}", Environment.OSVersion);
            Console.WriteLine(".NET Version: {0}", Environment.Version); Console.ReadLine(); #endif
        }
    }
}

'General .NET' 카테고리의 다른 글

닷넷 전용 어셈블리  (0) 2008/04/27
델리게이트(1)  (0) 2008/04/27
C# 전처리기 지시문  (0) 2008/04/27
기초 C# - 제너릭  (0) 2008/04/27
닷넷의 소켓 클래스  (0) 2008/04/11
ASP.NET MVC Framework  (0) 2008/03/27
Posted by -세티-
2008/04/27 00:34

기초 C# - 제너릭 General .NET2008/04/27 00:34

2006년 8월 12일에 작성된 글이며, 기존의 네이버 블로그를 폐쇄하고, 옮겨온 글입니다.

MSDN - Generic 소개

1. 제너릭 클래스와 메서드가 있다.
2. 제너릭 형식에서만 가능.
3. 재사용성, 형식 안정성, 효율성 달성이 가능.
4. 컬렉션과 컬렉션을 다루는 메서드에서 일반적으로 사용.
5. System.Collections.Generic 네임스페이스에 제너릭 기반 컬렉션 클래스가 존재.

using System;
using System.Collections.Generic;
using System.Text;

namespace VS2005
{
 //T형식 파라미터
 public class GenericClassTest<T>
 {
  //중첩된 Node 클래스도 T 제너릭
  public class Node
  {
   //T as private member data type
   private T data;
   public T Data
   {
    get { return data; }
    set { data = value; }
   }

   private Node head;
   public Node next;
   public Node Next
   {
    get { return next; }
    set { next = value; }
   }

   //중첩 Node 클래스의 생성자
   //생성자가 T를 받아서 타입을 결정
   public Node(T t)
   {
    next = null;
    Data = t;
   }
  }

  public GenericClassTest()
  {
   head = null;
  }

  public void AddHead(T t)
  {
   Node n = new Node(t);
   n.next = head;
   head = n;
  }
  public IEnumerator<T> GetEnumerator()
  {
   Node current = head;
   while(current != null)
   {
    yield return current.Data;
    current = current.Next;
   }
  }
 
 }

 public class GenericTest
 {
  public static void Main()
  {
   GenericClassTest<int> list = new GenericClassTest<int>();
   for (int i = 0; i < 10; i++ )
   {
    list.AddHead(i);
   }

   foreach (int i in list)
   {
    System.Console.Write(i + "");
   }
   System.Console.WriteLine("\nDone");
  }
 }
}

'General .NET' 카테고리의 다른 글

델리게이트(1)  (0) 2008/04/27
C# 전처리기 지시문  (0) 2008/04/27
기초 C# - 제너릭  (0) 2008/04/27
닷넷의 소켓 클래스  (0) 2008/04/11
ASP.NET MVC Framework  (0) 2008/03/27
Interface  (0) 2008/02/19
TAG c#, 제너릭
Posted by -세티-
2008/02/19 00:14

Interface General .NET2008/02/19 00:14

Interface란?
- 클래스의 한 종류
- 클래스의 뼈대만 가지고 있음.

Interface의 구성요소
- 메소드, 속성, 이벤트, 인덱서
- 선언만 가능

Interface의 접근자
- 기본적으로 public

Interface의 상속
- 중복상속, 단일 상속이 가능

Interface를 사용하는 목적
- 그것은 구현(Implementation)을 하기 위함이다.
- 이것은 비완전한 클래스 이므로 완전해지기 위해 구현을 해야 한다.
- 반드시 내부의 구현되지 않은 모든 멤버를 구현해야 한다.
- 인터페이스는 클래스에서 구현되어야 한다.

인터페이스의 구현 예)
using System;
using System.Collections.Generic;
using System.Text;

namespace CA_Interface
{

    interface IPrint
    {
        void SetUp();
        void PowerOn();
        void PowerOff();
        void LowPrint();
        void MidPrint();
        void FastPrint();
    }
    public class Program : IPrint
    {
        public void SetUp() {
            Console.WriteLine("프린트 설정을 준비중!");
            Console.ReadLine();
            return;
        }
        public void PowerOn() {
            Console.WriteLine("프린트 파워를 켜는 중!");
            Console.ReadLine();
            return;
        }
        public void PowerOff() {
            Console.WriteLine("프린트 파워를 끄는 중");
            Console.ReadLine();
            return;
        }
        public void LowPrint() {
            Console.WriteLine("느린 속도로 인쇄하는 중");
            Console.ReadLine();
            return;
        }
        public void MidPrint() {
            Console.WriteLine("중간 속도로 인쇄하는 중");
            Console.ReadLine(); Console.ReadLine();
            return;
        }
        public void FastPrint() {
            Console.WriteLine("빠른 속도로 인쇄하는 중");
            Console.ReadLine();
            return;
        }

        static void Main(string[] args)
        {
            IPrint ip = new Program();
            ip.SetUp();
        }
    }
}

인터페이스 + 인터페이스(속성)의 예)
using System;
using System.Collections.Generic;
using System.Text;

namespace CA_Interface
{
    interface IPowerOn
    {
        int IFlag
        {
            get;
            set;
        }
    }
    interface IPrint
    {
        void SetUp();
        void PowerOn();
        void PowerOff();
        void LowPrint();
        void MidPrint();
        void FastPrint();
    }
    public class Program : IPrint, IPowerOn
    {
        public void SetUp() {
            Console.WriteLine("Ready, Print Setup");
            Console.ReadLine();
            return;
        }
        public void PowerOn() {
            Console.WriteLine("Print Power On");
            Console.ReadLine();
            return;
        }
        public void PowerOff() {
            Console.WriteLine("Print Power Off");
            Console.ReadLine();
            return;
        }
        public void LowPrint() {
            Console.WriteLine("Doing Low Speed Print");
            Console.ReadLine();
            return;
        }
        public void MidPrint() {
            Console.WriteLine("Doing Miduam Speed Print");
            Console.ReadLine(); Console.ReadLine();
            return;
        }
        public void FastPrint() {
            Console.WriteLine("Doing Fast Speed Print");
            Console.ReadLine();
            return;
        }

        private int iflag = 0;
        public int IFlag
        {
            get {
                return iflag;
            }
            set {
                iflag = value;
            }
        }

        static void Main(string[] args)
        {
            IPrint ip = new Program();
            ip.SetUp();

            Program p = new Program();
            p.IFlag = 1000;
        }
    }
}

'General .NET' 카테고리의 다른 글

닷넷의 소켓 클래스  (0) 2008/04/11
ASP.NET MVC Framework  (0) 2008/03/27
Interface  (0) 2008/02/19
Interface란?  (0) 2008/02/18
스마트클라이언트 서명키 만들기  (0) 2008/02/17
닷넷으로 다국어 지원 폼 만들기  (0) 2008/02/12
Posted by -세티-