기존 클래스에서 상속받아 클래스를 만들거나 기존 클래스를 변경하여 다시 컴파일하지 않고 새로운 기능을 추가할 수 있습니다.
확장 메서드를 구현한 클래스가 같은 네임스페이스에 있어야할 필요는 없습니다. 다른 어셈블리에 존재하더라도 사용할 수 있습니다.
public static class ExtendClass
{
public static string GetString(this object obj)
{
return String.Format("{0}", obj);
}
public static int? GetInt(this string str)
{
if (string.IsNullOrEmpty(str))
{
return null;
}
else
{
int intValue = 0;
if (int.TryParse(str, out intValue))
{
return intValue;
}
else
{
return null;
}
}
}
}
콘솔응용프로그램 프로젝트를 만들고 아래와 같이 테스트 코드를 작성하였습니다.
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace TestExtensionMethods
{
class Program
{
static void Main(string[] args)
{
object obj = null;
string str = null;
try
{
Console.WriteLine("obj.ToString() : " + obj.ToString()); // 오류
}
catch(Exception ex)
{
Console.WriteLine("obj.ToString() : " + ex.Message);
}
try
{
Console.WriteLine("obj.GetString() : " + obj.GetString()); // 정상
}
catch (Exception ex)
{
Console.WriteLine("obj.GetString()" + ex.Message);
}
str = null;
int? n1 = str.GetInt();
Console.WriteLine("str.GetInt() 의 결과 [{0:n0}]", n1); // n1 == null
str = "1";
n1 = str.GetInt();
Console.WriteLine("str.GetInt() 의 결과 [{0:n0}]", n1); // n1 == 1
Console.ReadLine();
}
}
public static class ExtendClass
{
// object 확장 메서드
public static string GetString(this object obj)
{
return String.Format("{0}", obj);
}
// string 확장 메서드
public static int? GetInt(this string str)
{
if (string.IsNullOrEmpty(str))
{
return null;
}
else
{
int intValue = 0;
if (int.TryParse(str, out intValue))
{
return intValue;
}
else
{
return null;
}
}
}
}
}
참조
이 사이트는 광고를 포함하고 있습니다.
광고로 발생한 수익금은 서버 유지 관리에 사용되고 있습니다.This site contains advertisements.
Revenue generated by the ad servers are being used for maintenance.