달력

022012  이전 다음

  •  
  •  
  •  
  • 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
  •  
  •  
  •  
이 팁은 Visual Studio Codename "Orcas"에서 사용되는 C# 입니다.
제 생각에는 C# 3.0이라고 생각되어 개인적으로 C# 3.0 미리보기라고 한것입니다.

작업 환경
- Windows Server 2003 Standard Service Pack 2
- Visual Studio Codename "Orcas"

세번째 시간입니다.
이번엔 Extension Methods에 대해서 알아보도록 하겠습니다.
이번 역시 설명보다는 예제로 설명을 하도록 하겠습니다.

일단 예제로 이메일 주소를 가지고 있는 string이 있습니다.
이 이메일 주소의 유효성 검사를 하는 클래스와 함수를 만들고 사용을 합니다.

string email = "shblitz@shblitz.net";
if ( EmailValidator.IsValid(email) )
{
}

위 예제는 EmailValidator라는 클래스에 IsValid라는 함수를 만들어서 email의 유효성을 검사하는 예제입니다.

C# 3.0에서는 저런 방법이 아니라 string이라는 객체에 함수를 추가하여 사용할 수 있도록 할 수 있습니다.
그러면 아래와 같은 방법으로 사용이 가능할 것입니다.

string email = "shblitz@shblitz.net";
if ( email.IsValidEmailAddress() )
{
}

실제적으로 string 객체에는 위에서 보는 봐야 같이 IsValidEmailAddress() 라는 함수는 없습니다.
이 함수는 사용자가 추가한 함수 입니다.

그러면 이젠 어떻게 추가를 하는지 알아보도록 하겠습니다.

새로운 클래스 파일을 생성 하신 후 아래와 같이 확장 메소드를 추가합니다.

public static class ShblitzExtensions
{
    public static bool IsValidEmailAddress(this string s)
    {
        Regex regex = new Regex(@"^[\w-\.]+@([\w-]+\.)+[\w-]{2,4}$");
        return regex.IsMatch(s);
    }
}

위 예제를 보시면 이 함수는 string 객체에서 사용하고 결과 값으로 bool을 넘기는 것을 확인할 수 있습니다.

다음은 Visual Studio Codename "Orcas"에서 실제 사용되는 이미지다.

사용자 삽입 이미지

위 이미지에서 보는 것과 같이 string 객체에 IsValidEmailAddress라는 함수가 추가된것을 볼수 있다.
그리고 일반 함수와는 다르게 아이콘 모양도 다르며 풍선 도움말에는 (extension) 이라는 문구가 보인다.

위의 예제는 string 이라는 객체에 한해서 사용할 수 있는 예제입니다.
다음은 모든 객체에서 사용할 수 있는 확장 함수에 대해서 알아보도록 하겠습니다.

먼저 확장 메소드를 만듭니다.

using System;
using System.Collections;
namespace ShblitzExtensions
{
    public static class ShblitzExtensions
    {
        public static bool In(this object o, IEnumerable c)
        {
            foreach(object i in c)
            {
                if(i.Equals(o))
                {
                    return true;
                }
            }
           
            return false;
        }
    }
}

위 예제는 어떤 객체 리스트에 내가 지정한 객체가 포함이 되어 있는지 확인하는 예제입니다.
그러면 이젠 사용을 해보도록 하겠습니다.

예제는 숫자와 문자열에서 사용하는 방법입니다.

using System;
using ShblitzExtensions;
public class ShblitzTest
{
    // string 형에서 In 함수를 사용하는 예제
    public void TestUsage1()
    {
        string[] strList = { "One", "Two", "Three" };
        bool bTest1 = "One".In(strList);
       
        string strTest = "Four";
        bool bTest2 = strTest.In(strList);
    }

    // int 형에서 In 함수를 사용하는 예제
    public void TestUsage2()
    {
        int[] iList = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 };
       
        bool bTest1 = 3.In(iList);
       
        int iTest = 11;
        bool bTest2 = iTest.In(iList);
    }
}

위에서 보는 것과 같이 여러 객체 형에서 사용이 가능하기도 합니다.
이와 같이 사용하면 전에 사용하던 유틸 클래스 자체를 확장 함수 형식으로 변경을 해서 사용하면 편할거 같다고 생각이 듭니다.

이것으로 세번째 팁도 마치도록 하겠습니다.
다음 팁은 언제 올라올지 모르겠습니다. 아직 제가 해보지 못했거든요..
제가 해보고 이해를 하게 되면 올리도록 하겠습니다..

작성자 : 상현넘™ [SHBLITZ.NET]
Posted by 상현넘™

댓글을 달아 주세요

이 팁은 Visual Studio Codename "Orcas"에서 사용되는 C# 입니다.
제 생각에는 C# 3.0이라고 생각되어 개인적으로 C# 3.0 미리보기라고 한것입니다.

작업 환경
- Windows Server 2003 Standard Service Pack 2
- Visual Studio Codename "Orcas"

두번째 시간입니다.
이번엔 Object Initializers, Collection Initializers에 대해서 알아보도록 하겠습니다.
이번 역시 설명보다는 예제로 설명을 하도록 하겠습니다.

일단 먼저 Object Initializers에 대해서 먼저 설명을 하도록 하겠습니다.

1. C# 2.0에서 Object Initializers 사용법

Person person = new Person();
person.FirstName = "Sanghyun";
person.LastName = "Han";
person.Age = 27;

C# 2.0에선 위 예제처럼 일단 객체를 생성하고 그 객체의 각 프로퍼티에 값을 넣어주는 형식입니다.
그러나 이런 방법을 C# 3.0에선 객체를 생성하면서 한번에 가능합니다..

근데, 제 나이까지 공개가 되어 버리네요.. ㅋㅋ

2. C# 3.0에서 Object Initializers 사용법
 
Person person = new Person { FirstName = "Sanghyun", LastName = "Han", Age = 27 };

보시는 바와 같이 아주 간단합니다.
객체 생성시 {} 안에 프로퍼티 = 값 이렇게만 해주면 되는거죠!!

더 확장으로 객체안에 다른 객체를 초기화 하는 방법입니다.
물론 위의 방법과 같습니다.

Person person = new Person
{
    FirstName = "Sanghyun",
    LastName = "Han",
    Age = 27,
    Phone = new Phone
    {
        Home = "02-2222-3333",
        Cellular = "010-2222-3333"
    }
};

위 예제를 보는봐와 같이 객체 안에서 다른 객체를 생성하고 그 안에 프로퍼티의 값을 넣어주면 됩니다.
역시 엄청 편하죠^^

그럼 이번에 좀더 확장된 개념으로 Collection Initializers에 대해서 알아보도록 하겠습니다.

방법은 컬렉션의 Add 함수를 사용하는 방법과 컬렉션 생성에서 바로 추가하는 방법을 알아보도록 하겠습니다.

1.  Collection의 Add 함수를 사용

List<Person> people = new List<Person>();
people.Add(new Person { FirstName = "Sanghyun", LastName = "Han", Age = 27 });
people.Add(new Person { FirstName = "Bill", LastName = "Gates", Age = 50 });
people.Add(new Person { FirstName = "Susanne", LastName = "Guthrie", Age = 32 });

일반적으로 컬렉션 객체를 생성하고 Add 함수를 사용해서 객체를 넣는 방식입니다.
객체를 초기화 하는 방법은 위에서 설명한 방법대로 하면 되는 것입니다.

2. Collection을 초기화 할때 사용

List<Person> people = new List<Person>
{
    new Person { FirstName = "Sanghyun", LastName = "Han", Age = 27 },
    new Person { FirstName = "Bill", LastName = "Gates", Age = 50 },
    new Person { FirstName = "Susanne", LastName = "Guthrie", Age = 32 }
};

방식은 객체 초기화와 비슷하다는걸 알수 있습니다.
역시 많이 편해졌네요^^..
이것으로 두번째 팁을 마치도록 하겠습니다.
다음엔 확장 함수에 대해서 알아보도록 하죠^^

작성자 : 상현넘™ [SHBLITZ.NET]
Posted by 상현넘™

댓글을 달아 주세요

이 팁은 Visual Studio Codename "Orcas"에서 사용되는 C# 입니다.
제 생각에는 C# 3.0이라고 생각되어 개인적으로 C# 3.0 미리보기라고 한것입니다.

작업 환경
- Windows Server 2003 Standard Service Pack 2
- Visual Studio Codename "Orcas"

첫번째로 Automatic Properties에 대해서 알아보도록 하겠습니다.
설명보다는 예제로 설명을 하도록 하겠습니다.


1. C# 2.0 즉, Visual Studio 2005에서 Properties 사용법

public class Person
{
    private string _firstName;
    private string _lastName;
    private int _age;
    public string FirstName
    {
        get { return _firstName; }
        set { _firstName = value; }
    }
    public string LastName
    {
        get { return _lastName; }
        set { _lastName = value; }
    }
    public int Age
    {
        get { return _age; }
        set { _age = value; }
    }
}

지금까지 여러분들이 프로퍼티를 만들때 위 예제처럼 만들었을겁니다.
변수를 만들어 놓고 그 변수에다 값을 넣고 빼는 방식으로...
그러나 C# 3.0에서는 좀 더 편하게 변경이 되었습니다.


2. C# 3.0 즉, Visual Studio Codename "Orcas"에서 Properties 사용법

public class Person
{
    public string FirstName { get; set; }
    public string LastName { get; set; }
    public int Age { get; set; }
}

놀랍지 않습니까?? 소스 코드가 저렇게나 짧아지고 편해지다니...
그리고 프로퍼티가 일반적인 작업이 아닌 특별한 작업을 하는 경우는 C# 2.0에서 사용하던 방식대로 사용을 하시면 됩니다.
빨리 Orcas가 정식으로 나와서 사용을 했으면 좋겠군요^^

다음 팁은 객체와 컬렉션의 초기화에 대해서 알아보도록 하겠습니다.

작성자 : 상현넘™ [SHBLITZ.NET]
Posted by 상현넘™

댓글을 달아 주세요