'GET/Attribute'에 해당되는 글 6건

  1. 2009.09.24 참고 사이트.
  2. 2009.09.24 간단 예제.
  3. 2009.09.24 * Conditional 어트리뷰트 사용
  4. 2009.09.24 * DllImport 어트리뷰트
  5. 2009.09.24 Attrubute(어트리뷰트)
  6. 2009.09.24 Attribute Oriented Programming
posted by 방랑군 2009. 9. 24. 15:48


1. http://devray.tistory.com/category/.NET%20Framework/C%23%20Common

'GET > Attribute' 카테고리의 다른 글

간단 예제.  (0) 2009.09.24
* Conditional 어트리뷰트 사용  (0) 2009.09.24
* DllImport 어트리뷰트  (0) 2009.09.24
Attrubute(어트리뷰트)  (0) 2009.09.24
Attribute Oriented Programming  (0) 2009.09.24
posted by 방랑군 2009. 9. 24. 15:48
1. Obsolete 어트리뷰트
2.  사용자 어트리뷰트

====================================

Program.cs 코딩

------------------------------------

using System;

public class 특성
{
    public static void Main(string[] args)
    {
        Say1();
        Say2();
    }
   
    /// <summary>
    /// 닷넷 1.0 버전
    /// </summary>
    // Say1()은 오래된버전으로 가정하고 Say2()만 사용하고싶을때..ObsoleteAttribute사용 Attribute생략가능~
    [Obsolete("현재 메서드는 오래된 버전이므로, Say2()를 사용하세요." , false)] // false는 경고만 띄워주고,true는 컴파일오류내줌
    public static void Say1()
    {
        Console.WriteLine("안녕");
    }
   
    /// <summary>
    /// 닷넷 2.0 버전 이상
    /// </summary>
    public static void Say2()
    {
        Console.WriteLine("안녕하세열");
    }
}

=========================================

사용자정의특성.cs 코딩

-------------------------------------------

using System;

namespace 사용자정의특성
{
    [AttributeUsage(AttributeTargets.Method | AttributeTargets.Class, AllowMultiple=true)]
    // AttributeUsate = 특정 멤버에만 특성적용해줌, AllowMultiple=true : 다중지정 가능하게..
   
    public class AuthorAttribute : Attribute
    {
        public string name;
        public AuthorAttribute(string name)
        {
            this.name = name;
        }
    }
   
    [AuthorAttribute("RedPlus")]
    class 사용자정의특성
    {
        static void Main(string[] args)
        {
            Say();
            ShowMetaData();
        }
        // 특성정보 읽어오기
        private static void ShowMetaData()
        {
            System.Attribute[] attrs = System.Attribute.GetCustomAttributes(typeof(사용자정의특성));
           
            foreach (var attr in attrs)
         {
         // if (attr is AuthorAttribute)
            // {
         //     AuthorAttribute aa = ( AuthorAttribute)attr;
               //     Console.WriteLine("{0}", aa.name);
            // }
                AuthorAttribute aa = attr as AuthorAttribute;
                if (aa != null)
                {
                    Console.WriteLine("{0}", aa.name);
                }
         }
        }
        static void Say() { Console.WriteLine("안녕하세요."); }
    }
}

==============================================



'GET > Attribute' 카테고리의 다른 글

참고 사이트.  (0) 2009.09.24
* Conditional 어트리뷰트 사용  (0) 2009.09.24
* DllImport 어트리뷰트  (0) 2009.09.24
Attrubute(어트리뷰트)  (0) 2009.09.24
Attribute Oriented Programming  (0) 2009.09.24
posted by 방랑군 2009. 9. 24. 15:36
* Conditional 어트리뷰트 사용
#define DEBUG       //DEBUG   
//어트리뷰트 사용  
// #undef DEBUG     //어튜리뷰트 사용 해제
using System;  
using System.Diagnostics;
namespace CSharpStudy  
{  
       class  MainClass  
       {  
           [Conditional("DEBUG")]  
           public static void DebugPrint()  
           {  
              Console.WriteLine("Debug");  
           }   

           [STAThread]  
           static void Main(string[] args)  
           {  
              DebugPrint();  
           }
       }
}

C#코드는 디버깅을 지원하기 위해서 Conditonal 어트리뷰트를 사용 하며 지원을 합니다. Conditional 어트리뷰트는 사용자가 정의한 값에 의존해서 해당 메소드를 실행 시키도록 합니다. Conditional 어트리뷰트는 System.Diagnositcs 네임스페이스 안에 정의 되어 있습니다.

즉, #define을 설정해주지 않으면 실행 되지 않으며 설정시 실행이 됩니다.
Conditional 어트리뷰트는 클래스나 구조체 안에 있는 메소드에만 접착시킬 수 있다. 또한 그 메소드는 반드시 void형이어야 하며, 여러 Conditional어트리뷰트를 접착시키면 그중 하나만 위치지정 파라미터가 정의 되어 있어도 해당 메소드는 실행됩니다.

'GET > Attribute' 카테고리의 다른 글

참고 사이트.  (0) 2009.09.24
간단 예제.  (0) 2009.09.24
* DllImport 어트리뷰트  (0) 2009.09.24
Attrubute(어트리뷰트)  (0) 2009.09.24
Attribute Oriented Programming  (0) 2009.09.24
posted by 방랑군 2009. 9. 24. 15:35
* DllImport 어트리뷰트
   DllImport 어트리뷰트는 C#안에서 Unmanaged 코드를 사용 할 수 있게 합니다. Unmanaged 코드란 닷넷 환경밖에서 개발된 코드를 말하며 예를들면 DLL 파일들안에 컴파일된 표준 , DllImport 어트리뷰트는 System.Runtime.InteropServices 네임스페이스안에서 정의 되어있습니다.

using System  
using System.Runtime.InteopServices;  
class testClass  
{  
        [DllImport("User32.dll"]  
        public static extern int MessageBox(int h, string m, string c, int type);   

        static void Main()   
        {  
             MessageBox(0, "Hello world!", "C#", 0);  
        }  
}

다음은 Win32 API중 User32.dll안에 있는 MessageBox함수를 호출형태 입니다.
int MessageBox(HWND hWnd, LPCTSTR lpText, LPCTSTR lpCaption, UINT uType);  

     [DllImport("kernel32.dll")]  
     private static extern bool Beep(int freq, int dur);   

     [STAThread]  
     static void Main(string[] args)  
     {  
          MessageBox(0, "MessageBox Text", "DllImport Test", 2);  
          Beep(2600,1000);  
     }

위코드는 외부의 비관리(Unmanaged)코드에 있는 DLL을 특정 프로세스 메모리에 로딩하여 해당 메소드를 호출하여 사용한 예입니다.

※ extern 키워드 : 어떤 메서드가 현재 프로그램 외부에 있음을 나타내는 키워드

'GET > Attribute' 카테고리의 다른 글

참고 사이트.  (0) 2009.09.24
간단 예제.  (0) 2009.09.24
* Conditional 어트리뷰트 사용  (0) 2009.09.24
Attrubute(어트리뷰트)  (0) 2009.09.24
Attribute Oriented Programming  (0) 2009.09.24
posted by 방랑군 2009. 9. 24. 14:52

 특성. - 코드에 대한 설명문매타데이타)

1. 멤버 앞에 [특성(특성값)] 식으로 붙여서 사용
2. 분야(Web, XML..) 에 따라서 많은 내장 특성이 있다.
3. 사용자 정의 특성을 만들고자 할 때에는 System.Attribute 를 상속 받아 설계
4. 특성을 통해서 런타임 시에 추가적인 기능을 부여가능.
5. 자동차로 따지면 자동차 악세사리



01 | 개요(Overview of Attributes)
    어트리뷰트는 클래스 안에 메타정보를 포함 시킬 수 있는 새로운 기술입니다. 어트리뷰트는 선언적 컴파일을 지원하기 때문에 코딩에 많은 이점을 주고 있으며 특히 컴포넌트를 만들 때 유용하게 쓸 수 있습니다.

실제, 어트리뷰트는 클래스 멤버변수로 관리하기에는 적절하지 않고 주로 코드 외부에서 어떤 자료형에 대한 서술이 필요할 때 많이 사용하는 편입니다.

Attributes 소개
    어트리뷰트는 최근 자바 이노테이션(Annotation)의 등장으로 어트리뷰트 오리엔티드 프로그래밍(attribute oriented programming)에 대한 관심이 많아 지고 있습니다. 하지만 어트리뷰트 오리엔티드 프로그래밍은 마이크로소프트(이하 MS)진영에서 COM, COM+개발에서 부분적으로 이미 사용하고 있고 닷넷 프레임워크 경우 어트리뷰티드 프로그래밍이라는 이름으로 지원하고 있습니다.

어트리뷰트 오렌티드 프로그래밍이란 프로그램 레벨에서의 마킹 기법입니다.
이를 사용하면 프로그램을 개발할 때 프로그램과 관련된 메타데이터를 정보를 저장하고 이 정보를 이용하여 디자인&컴파일 타임 로딩 또는 런타임 시에 원하는 동작을 수행 하도록 할 수 있습니다.


예를 들면 트랜잭션(Transaction)이라는 어트리뷰트를 선언한 클래스는 클래스의 메소드를 실행할 때 트랜잭션 컨텍스트 내에서 수행 되도록 한다. 이러한 기법은 코어 비즈니스 로직과 트랜잭션과 로깅과 같은 횡단 관심사(Cross-cutting concerns)를 분리한다는 점에서 AOP(Aspect Oriented Programming) 기법과 유사합니다.

* 어트리뷰티드 프로그래밍 패러다임의 시작
    어트리뷰티드 프로그래밍 기법은 COM 기반 프로그래밍에서의 인터페이스 정의 언어(Interface Definition Language)에서 사용되기 시작했다. 라이브러리와 클래스의 uuid나 helpstring같은 프로그램에 대한 메타데이터 값들을 라이브러리나 클래스의 정의에 다음과 같이 선언해 컴파일 시에 참조할 수 있도록 지원 합니다.

[uuid(74731E6F-A0E8-47FB-833C-8D6C75E85981),
helpstring("MessengerAx Control"), control]
coclass MessengerAx


이러한 기법은 COM+ 기반을 발전하면서 애플리케이션의 트랙젹선 설정과 풀리, 보안 설정 등의 메타데이터 정보를 구성요소 서비스와 같은 별도의 저장소를 이용해 등록한 후 이정보를 런타임시 참조를 해야 동작이 가능합니다.

하지만 이러한 기능을 닷넷 에서는 이보다 한 단계 더 발전된 형태로 어트리뷰트를 별도의 저장소가 아닌 프로그램 내에 직접 저장할 수 있고 동작이 가능합니다.

어트리뷰트는 클래스 뿐만 아니라 데이터 구조, 열거자 그리고 어셈블리와 같은 프로그래밍적 요소들의 실행시 행동에 대한 정보를 기술 할수 있습니다. 어트리뷰트를 아티클을 보시는 여러분들은 코드에 대해서 어떻게 지정되고 사용되는지에 대한 주석으로 생각 할수도 있습니다. 하지만 일반 주석의 의해 전달되는 정보들은 일정한 틀이 없고 그것을 정형화하기 힘듭니다. 또한 그 정보들에 대해 런타임상의 접근하기가 어렵습니다.

어트리뷰트는 메타데이터지만 일종의 클래스입니다.
어트리뷰트를 정의해서 사용하게 되면 어떠한 클래스에 대해 설명할 때 이 어트리뷰트를 사용해서 설명할수 있고 주석처럼 직접 소스를 보아야 알수 있는 정보들을 어셈블리 안에 직접 넣거나 그 정보을 보는 방법도 코드레벨에서 가능합니다. 즉, 어트리뷰트는 작성한 클래스와 어떤 정보들(ex>이 클래스는 누가 디자인했고 라이센스는 누구한테 있으며 버전은 몇버전이다) 을 연결시켜주는 기술을 지원합니다.

* 어트리뷰트 시용
어트리뷰트를 사용할 수 있는 요소는 다음과 같습니다.
어트리뷰트를 사용할 수 있는 요소들
 어셈블리, 모듈, 클래스, 구조체, 열거형, 변수, 생성자, 메소드, 프로퍼티, 필드, 이벤트, 인터페이스, 파라미터,
 반환값, 델리게이트

* 어트리뷰트 문장 형식
attribute(positional_parameters, name_parameter = value, ...)]

'[ ]' 안에 무슨 메소드와 같은 것이 쓰여져 있습니다. 그리고 그 메소드 안에 파라미터들이 있습니다.

여기서 파리미터는 두가지를 의미합니다. 하나는 위치지정 파라미터(positional_parameter)로 꼭 필요한 정보들을 기술할때 쓰며 위치 지정 파라미터는 반드시 넣어줘야하는 정보들입니다. 두번째로는 명명 파라미터(name_parameter)는 꼭 필요하지 않지만 사용자에 따라서 넣을 수도 있고 그렇지 않을수도 있습니다. 어트리뷰트 안에 추가적인 정보를 집어 넣을때 사용됩니다.

* 어트리뷰트 사용 예
[AdditionalInfo("2009-05-20")]
public class Test
{
   //TODO :  내용
}

여기서 AdditionalInfo는 어트리뷰트 이며 "2009-05-20"는 위치지정 파리미터가 됩니다. 개발하고자하는 코드바로위에 어트리뷰트를 써주면 됩니다.


'GET > Attribute' 카테고리의 다른 글

참고 사이트.  (0) 2009.09.24
간단 예제.  (0) 2009.09.24
* Conditional 어트리뷰트 사용  (0) 2009.09.24
* DllImport 어트리뷰트  (0) 2009.09.24
Attribute Oriented Programming  (0) 2009.09.24
posted by 방랑군 2009. 9. 24. 14:49

'GET > Attribute' 카테고리의 다른 글

참고 사이트.  (0) 2009.09.24
간단 예제.  (0) 2009.09.24
* Conditional 어트리뷰트 사용  (0) 2009.09.24
* DllImport 어트리뷰트  (0) 2009.09.24
Attrubute(어트리뷰트)  (0) 2009.09.24