<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0">
	<channel>
		<title>flyingmt blog</title>
		<link>http://lovehana.com/</link>
		<description></description>
		<language>ko</language>
		<pubDate>Fri, 05 Mar 2010 15:07:51 +0900</pubDate>
		<generator>Textcube 1.7.8 : Con moto</generator>
		<item>
			<title>WPF 4 새로운 기능 : UseLayoutRounding</title>
			<link>http://lovehana.com/596</link>
			<description>&lt;P&gt;참조 : &lt;a href=&quot;http://blogs.msdn.com/llobo/archive/2009/10/30/new-wpf-features-layoutrounding.aspx&quot;&gt;http://blogs.msdn.com/llobo/archive/200 &amp;middot;&amp;middot;&amp;middot; ing.aspx&lt;/a&gt;&lt;/P&gt;
&lt;P&gt;만약 여러분이 실버라이트에 익숙하다면 새로운 것은 없습니다. 이 속성 FrameworkElement에 새로이 추가가 되었었는데 각 길이를 반올림 하는 기능입니다. 기본 값은 실버라이트와 다르게 False이며 값을 설정하게 되면 자식 요소에 상속 됩니다. 이 속성을 설정한 것과 설정하지 않은 것은 다음과 같이 차이를 볼 수 있습니다.&lt;BR&gt;&lt;BR&gt;&lt;div class=&quot;imageblock center&quot; style=&quot;text-align: center; clear: both;&quot;&gt;&lt;img src=&quot;http://www.lovehana.com/attach/1/7289571229.png&quot; alt=&quot;사용자 삽입 이미지&quot; height=&quot;90&quot; width=&quot;423&quot; /&gt;&lt;/div&gt;&lt;/P&gt;
&lt;P&gt;예제 코드는 다음과 같습니다.&lt;BR&gt;&lt;BR&gt;&lt;div class=&quot;imageblock center&quot; style=&quot;text-align: center; clear: both;&quot;&gt;&lt;img src=&quot;http://www.lovehana.com/attach/1/7070167822.png&quot; alt=&quot;사용자 삽입 이미지&quot; height=&quot;120&quot; width=&quot;594&quot; /&gt;&lt;/div&gt;&lt;/P&gt;&lt;fieldset style=&quot;margin:20px 0px 20px 0px;padding:5px;&quot;&gt;&lt;legend&gt;&lt;span&gt;&lt;strong&gt;크리에이티브 커먼즈 라이센스&lt;/strong&gt;&lt;/span&gt;&lt;/legend&gt;&lt;!--Creative Commons License--&gt;&lt;div style=&quot;float: left; width: 88px; margin-top: 3px;&quot;&gt;&lt;a rel=&quot;license&quot; href=&quot;http://creativecommons.org/licenses/by-nc-nd/2.0/kr/&quot; target=_blank&gt;&lt;img alt=&quot;Creative Commons License&quot; style=&quot;border-width: 0&quot; src=&quot;http://i.creativecommons.org/l/by-nc-nd/2.0/kr/88x31.png&quot;/&gt;&lt;/a&gt;&lt;/div&gt;&lt;div style=&quot;margin-left: 92px; margin-top: 3px; text-align: justify;&quot;&gt;이 저작물은 &lt;a rel=&quot;license&quot; href=&quot;http://creativecommons.org/licenses/by-nc-nd/2.0/kr/&quot; target=_blank&gt;크리에이티브 커먼즈 코리아 저작자표시-비영리-변경금지 2.0 대한민국 라이센스&lt;/a&gt;에 따라 이용하실 수 있습니다.
			&lt;!-- Creative Commons License--&gt;
			&lt;!-- &lt;rdf:RDF xmlns=&quot;http://web.resource.org/cc/&quot; xmlns:dc=&quot;http://purl.org/dc/elements/1.1/&quot; xmlns:rdf=&quot;http://www.w3.org/1999/02/22-rdf-syntax-ns#&quot;&gt;
			&lt;Work rdf:about=&quot;&quot;&gt;
			&lt;license rdf:resource=&quot;http://creativecommons.org/licenses/by-nc-nd/2.0/kr/&quot; /&gt;
			&lt;/Work&gt;
			&lt;License rdf:about=&quot;http://creativecommons.org/licenses/by-nc-nd/&quot;&gt;
			&lt;permits rdf:resource=&quot;http://web.resource.org/cc/Reproduction&quot;/&gt;
			&lt;permits rdf:resource=&quot;http://web.resource.org/cc/Distribution&quot;/&gt;
			&lt;requires rdf:resource=&quot;http://web.resource.org/cc/Notice&quot;/&gt;
			&lt;requires rdf:resource=&quot;http://web.resource.org/cc/Attribution&quot;/&gt;&lt;prohibits rdf:resource=&quot;http://web.resource.org/cc/CommercialUse&quot;/&gt;&lt;/License&gt;&lt;/rdf:RDF&gt; --&gt;&lt;/div&gt;&lt;/fieldset&gt;</description>
			<category>WPF</category>
			<category>WPF</category>
			<author>(나는산)</author>
			<guid>http://lovehana.com/596</guid>
			<comments>http://lovehana.com/596#entry596comment</comments>
			<pubDate>Wed, 30 Dec 2009 17:25:28 +0900</pubDate>
		</item>
		<item>
			<title>WPF 4 새로운 기능 : 업데이트된 파일 대화상자</title>
			<link>http://lovehana.com/595</link>
			<description>참조 : &lt;a href=&quot;http://blogs.msdn.com/llobo/archive/2009/11/12/new-wpf-features-updated-file-dialogs.aspx&quot;&gt;http://blogs.msdn.com/llobo/archive/200 &amp;middot;&amp;middot;&amp;middot; ogs.aspx&lt;/a&gt;&lt;BR&gt;&lt;BR&gt;기존 OpenFileDialog나 SaveFileDialog가 XP 스타일 이였던 것을 Windows Vista/7 스타일로 수정되었습니다.&lt;BR&gt;&lt;BR&gt;기존에는 다음과 같았으나,&lt;BR&gt;&lt;BR&gt;&lt;div class=&quot;imageblock center&quot; style=&quot;text-align: center; clear: both;&quot;&gt;&lt;img src=&quot;http://www.lovehana.com/attach/1/2230556743.png&quot; alt=&quot;사용자 삽입 이미지&quot; height=&quot;361&quot; width=&quot;610&quot; /&gt;&lt;/div&gt;다음과 같이 변경되었습니다.&lt;BR&gt;&lt;BR&gt;&lt;div class=&quot;imageblock center&quot; style=&quot;text-align: center; clear: both;&quot;&gt;&lt;img src=&quot;http://www.lovehana.com/attach/1/4694296921.png&quot; alt=&quot;사용자 삽입 이미지&quot; height=&quot;529&quot; width=&quot;610&quot; /&gt;&lt;/div&gt;&lt;BR&gt;&lt;BR&gt;&lt;BR&gt;&lt;fieldset style=&quot;margin:20px 0px 20px 0px;padding:5px;&quot;&gt;&lt;legend&gt;&lt;span&gt;&lt;strong&gt;크리에이티브 커먼즈 라이센스&lt;/strong&gt;&lt;/span&gt;&lt;/legend&gt;&lt;!--Creative Commons License--&gt;&lt;div style=&quot;float: left; width: 88px; margin-top: 3px;&quot;&gt;&lt;a rel=&quot;license&quot; href=&quot;http://creativecommons.org/licenses/by-nc-nd/2.0/kr/&quot; target=_blank&gt;&lt;img alt=&quot;Creative Commons License&quot; style=&quot;border-width: 0&quot; src=&quot;http://i.creativecommons.org/l/by-nc-nd/2.0/kr/88x31.png&quot;/&gt;&lt;/a&gt;&lt;/div&gt;&lt;div style=&quot;margin-left: 92px; margin-top: 3px; text-align: justify;&quot;&gt;이 저작물은 &lt;a rel=&quot;license&quot; href=&quot;http://creativecommons.org/licenses/by-nc-nd/2.0/kr/&quot; target=_blank&gt;크리에이티브 커먼즈 코리아 저작자표시-비영리-변경금지 2.0 대한민국 라이센스&lt;/a&gt;에 따라 이용하실 수 있습니다.
			&lt;!-- Creative Commons License--&gt;
			&lt;!-- &lt;rdf:RDF xmlns=&quot;http://web.resource.org/cc/&quot; xmlns:dc=&quot;http://purl.org/dc/elements/1.1/&quot; xmlns:rdf=&quot;http://www.w3.org/1999/02/22-rdf-syntax-ns#&quot;&gt;
			&lt;Work rdf:about=&quot;&quot;&gt;
			&lt;license rdf:resource=&quot;http://creativecommons.org/licenses/by-nc-nd/2.0/kr/&quot; /&gt;
			&lt;/Work&gt;
			&lt;License rdf:about=&quot;http://creativecommons.org/licenses/by-nc-nd/&quot;&gt;
			&lt;permits rdf:resource=&quot;http://web.resource.org/cc/Reproduction&quot;/&gt;
			&lt;permits rdf:resource=&quot;http://web.resource.org/cc/Distribution&quot;/&gt;
			&lt;requires rdf:resource=&quot;http://web.resource.org/cc/Notice&quot;/&gt;
			&lt;requires rdf:resource=&quot;http://web.resource.org/cc/Attribution&quot;/&gt;&lt;prohibits rdf:resource=&quot;http://web.resource.org/cc/CommercialUse&quot;/&gt;&lt;/License&gt;&lt;/rdf:RDF&gt; --&gt;&lt;/div&gt;&lt;/fieldset&gt;</description>
			<category>WPF</category>
			<category>WPF</category>
			<author>(나는산)</author>
			<guid>http://lovehana.com/595</guid>
			<comments>http://lovehana.com/595#entry595comment</comments>
			<pubDate>Wed, 30 Dec 2009 16:02:53 +0900</pubDate>
		</item>
		<item>
			<title>WPF 4 새로운 기능 : Easing Functions</title>
			<link>http://lovehana.com/594</link>
			<description>&lt;P&gt;참조 : &lt;a href=&quot;http://blogs.msdn.com/llobo/archive/2009/10/23/new-wpf-features-easing-functions.aspx&quot;&gt;http://blogs.msdn.com/llobo/archive/200 &amp;middot;&amp;middot;&amp;middot; ons.aspx&lt;/a&gt;&lt;BR&gt;&lt;BR&gt;Easing 함수들은 여러분들의 애니메이션들에 사용자 정의 수학 방정식들을 추가할 수 있게 해줍니다. 이런 사용자 정의 수학 방정식들을 이용하면 애니매이션들은 더 실제와 같거나 부드럽습니다. WPF 4에서는 이런 사용자 정의 수학 방정식 11개가 미리 정의 되어 있습니다. 이들 각 함수들은 3개의 모드(EaseIn, EaseOut, EaseInOut)를 가집니다.&lt;/P&gt;
&lt;P&gt;이번 WPF 4에서 기존에 있었거나 새롭게 추가된 애니매이션 관련 클래스들 - ByteAnimation, ColorAnimation, DecimalAnimation, DoubleAnimation, Int16Animation, Int32Animation, Int64Animation, Point3DAnimation, PointAnimation, QuaternionAnimation, RectAnimation, Rotation3DAnimation, SingleAnimation, SizeAnimation, ThicknessAnimation, Vector3DAnimation, VectorAnimation 등 - 전반적으로 EasingFunction 속성이 추가되었다. 이 속성은 IEasingFunction이라는 인터페이스로 정의 되어 있으며, 이것은 개발자에게 다양한 효과를 애니메이션에 적용할 수 있도록 만들수 있도록 해줍니다.&lt;/P&gt;
&lt;P&gt;IEasingFunction에 대해서 더 자세하게 얘기하자면 0과 1사이의 정규화된 시간에 각각 값을 반환할 수 있는 함수를 만들 수 있도록 해준다. 쉽게 얘기하면 0은 애니메이션이 시작하는 값이고 1은 애니메이션이 끝나는 값을 가리킵니다.&lt;/P&gt;
&lt;P&gt;WPF 4에서는 IEasingFunction을 상속받아 미리 정의해놓은 클래스가 11개가 있다고 했습니다. 이들은 클래스는 공통적으로 System.Windows.Media.Animation.EasingFunctionBase 클래스를 상속합니다. 대부분 미리 정의해 놓은 EasingFunction을 사용하지 않고 사용자가 직접 개발한다면 이 클래스를 상속 받아 사용합니다. EaseInCore 함수를 오버라이드 하여 작성하면 되는데 다음과 같이 하면 됩니다.&lt;BR&gt;&lt;BR&gt;&lt;/P&gt;&lt;PRE&gt;&lt;SPAN style=&quot;COLOR: blue&quot;&gt;namespace&lt;/SPAN&gt; CustomEasingFunction
{
    &lt;SPAN style=&quot;COLOR: blue&quot;&gt;public&lt;/SPAN&gt; &lt;SPAN style=&quot;COLOR: blue&quot;&gt;class&lt;/SPAN&gt; CustomSeventhPowerEasingFunction : EasingFunctionBase
    {
        &lt;SPAN style=&quot;COLOR: blue&quot;&gt;public&lt;/SPAN&gt; CustomSeventhPowerEasingFunction()
            : &lt;SPAN style=&quot;COLOR: blue&quot;&gt;base&lt;/SPAN&gt;()
        {
        }

        &lt;SPAN style=&quot;COLOR: green&quot;&gt;// Specify your own logic for the easing function by overriding
&lt;/SPAN&gt;
        &lt;SPAN style=&quot;COLOR: green&quot;&gt;// the EaseInCore method. Note that this logic applies to the &quot;EaseIn&quot;
&lt;/SPAN&gt;
        &lt;SPAN style=&quot;COLOR: green&quot;&gt;// mode of interpolation. 
&lt;/SPAN&gt;
        &lt;SPAN style=&quot;COLOR: blue&quot;&gt;protected&lt;/SPAN&gt; override double EaseInCore(double normalizedTime)
        {
            &lt;SPAN style=&quot;COLOR: green&quot;&gt;// applies the formula of time to the seventh power.
&lt;/SPAN&gt;
            &lt;SPAN style=&quot;COLOR: blue&quot;&gt;return&lt;/SPAN&gt; Math.Pow(normalizedTime, 7);
        }

        &lt;SPAN style=&quot;COLOR: green&quot;&gt;// Typical implementation of CreateInstanceCore
&lt;/SPAN&gt;
        &lt;SPAN style=&quot;COLOR: blue&quot;&gt;protected&lt;/SPAN&gt; override Freezable CreateInstanceCore()
        {

            &lt;SPAN style=&quot;COLOR: blue&quot;&gt;return&lt;/SPAN&gt; &lt;SPAN style=&quot;COLOR: blue&quot;&gt;new&lt;/SPAN&gt; CustomSeventhPowerEasingFunction();
        }

    }
}
&lt;/PRE&gt;
&lt;P&gt;EasingFunctionBase는 EasingMode 속성을 가지고 있습니다. EasingMode는 다음과 같이 3가지 모드가 있습니다.&lt;BR&gt;- EaseIn : 기본 EaseInCore 구현대로 작동됩니다.&lt;BR&gt;- EaseOut : 기본 EaseInCore와 반대로 작동됩니다. (X, Y좌표 -1 곱한값)&lt;BR&gt;- EaseInOut : EaseIn 실행후 EaseOut 실행됩니다.&lt;/P&gt;
&lt;P&gt;미리 정의해놓은 EasingFunction은 다음과 같습니다.&lt;BR&gt;&lt;BR&gt;&lt;div class=&quot;imageblock center&quot; style=&quot;text-align: center; clear: both;&quot;&gt;&lt;img src=&quot;http://www.lovehana.com/attach/1/1957377489.png&quot; alt=&quot;사용자 삽입 이미지&quot; height=&quot;570&quot; width=&quot;610&quot; /&gt;&lt;/div&gt;&lt;/P&gt;
&lt;P&gt;&lt;div class=&quot;imageblock center&quot; style=&quot;text-align: center; clear: both;&quot;&gt;&lt;img src=&quot;http://www.lovehana.com/attach/1/4549042575.png&quot; alt=&quot;사용자 삽입 이미지&quot; height=&quot;549&quot; width=&quot;610&quot; /&gt;&lt;/div&gt; &lt;/P&gt;
&lt;P&gt;&lt;div class=&quot;imageblock center&quot; style=&quot;text-align: center; clear: both;&quot;&gt;&lt;img src=&quot;http://www.lovehana.com/attach/1/4890306808.png&quot; alt=&quot;사용자 삽입 이미지&quot; height=&quot;292&quot; width=&quot;610&quot; /&gt;&lt;/div&gt; &lt;/P&gt;결론적으로 어떻게 보면 기존 Spline 사용하는 것을 더 넓게 적용, 더 자세하게 제어할 수 있게 되었다고 생각하면 될 것 같습니다.&lt;BR&gt;&lt;fieldset style=&quot;margin:20px 0px 20px 0px;padding:5px;&quot;&gt;&lt;legend&gt;&lt;span&gt;&lt;strong&gt;크리에이티브 커먼즈 라이센스&lt;/strong&gt;&lt;/span&gt;&lt;/legend&gt;&lt;!--Creative Commons License--&gt;&lt;div style=&quot;float: left; width: 88px; margin-top: 3px;&quot;&gt;&lt;a rel=&quot;license&quot; href=&quot;http://creativecommons.org/licenses/by-nc-nd/2.0/kr/&quot; target=_blank&gt;&lt;img alt=&quot;Creative Commons License&quot; style=&quot;border-width: 0&quot; src=&quot;http://i.creativecommons.org/l/by-nc-nd/2.0/kr/88x31.png&quot;/&gt;&lt;/a&gt;&lt;/div&gt;&lt;div style=&quot;margin-left: 92px; margin-top: 3px; text-align: justify;&quot;&gt;이 저작물은 &lt;a rel=&quot;license&quot; href=&quot;http://creativecommons.org/licenses/by-nc-nd/2.0/kr/&quot; target=_blank&gt;크리에이티브 커먼즈 코리아 저작자표시-비영리-변경금지 2.0 대한민국 라이센스&lt;/a&gt;에 따라 이용하실 수 있습니다.
			&lt;!-- Creative Commons License--&gt;
			&lt;!-- &lt;rdf:RDF xmlns=&quot;http://web.resource.org/cc/&quot; xmlns:dc=&quot;http://purl.org/dc/elements/1.1/&quot; xmlns:rdf=&quot;http://www.w3.org/1999/02/22-rdf-syntax-ns#&quot;&gt;
			&lt;Work rdf:about=&quot;&quot;&gt;
			&lt;license rdf:resource=&quot;http://creativecommons.org/licenses/by-nc-nd/2.0/kr/&quot; /&gt;
			&lt;/Work&gt;
			&lt;License rdf:about=&quot;http://creativecommons.org/licenses/by-nc-nd/&quot;&gt;
			&lt;permits rdf:resource=&quot;http://web.resource.org/cc/Reproduction&quot;/&gt;
			&lt;permits rdf:resource=&quot;http://web.resource.org/cc/Distribution&quot;/&gt;
			&lt;requires rdf:resource=&quot;http://web.resource.org/cc/Notice&quot;/&gt;
			&lt;requires rdf:resource=&quot;http://web.resource.org/cc/Attribution&quot;/&gt;&lt;prohibits rdf:resource=&quot;http://web.resource.org/cc/CommercialUse&quot;/&gt;&lt;/License&gt;&lt;/rdf:RDF&gt; --&gt;&lt;/div&gt;&lt;/fieldset&gt;</description>
			<category>WPF</category>
			<category>WPF</category>
			<author>(나는산)</author>
			<guid>http://lovehana.com/594</guid>
			<comments>http://lovehana.com/594#entry594comment</comments>
			<pubDate>Wed, 30 Dec 2009 15:40:56 +0900</pubDate>
		</item>
		<item>
			<title>WPF 4 새로운 기능 : CaretBrush / SelectionBrush / SelectionOpacity</title>
			<link>http://lovehana.com/593</link>
			<description>&lt;P&gt;참조 : &lt;a href=&quot;http://blogs.msdn.com/llobo/archive/2009/10/27/new-wpf-features-caretbrush-selectionbrush.aspx&quot;&gt;http://blogs.msdn.com/llobo/archive/200 &amp;middot;&amp;middot;&amp;middot; ush.aspx&lt;/a&gt;&lt;BR&gt;&lt;BR&gt;WPF 4 부터는 TextBoxBase를 상속 받는 RichTextBox와 TextBox 컨트롤와 PasswordBox 컨트롤에 새로운 속성인 CaretBrush, SelectionBrush 그리고 SelectionOpacity가 추가되었다.&lt;/P&gt;
&lt;P&gt;이전 버전에서는 텍스트 선택 색상과 투명도를 조절할 수 없었으며, 현재 커서 색상을 수정할 수 없었습니다. WPF4 부터는 텍스트 선택 부분을 개발자가 Brush로 설정하거나 텍스트 선택 부분의 투명도를 설정할 수 있습니다. 또, 현재 커서도 개발자가 Brush로 설정할 수 있습니다.&lt;/P&gt;
&lt;P&gt;CaretBrush는 현재 커서의 표시를 Brush로 설정하거나 가져옵니다.&lt;BR&gt;SelectionBrush는 현재 선택 부분의 표시를 Brush로 설정하거나 가져옵니다.&lt;BR&gt;SelectionOpacity는 현재 선택 부분의 표시의 투명도를 설정하거나 가져옵니다.&lt;BR&gt;&lt;BR&gt;&lt;div class=&quot;imageblock center&quot; style=&quot;text-align: center; clear: both;&quot;&gt;&lt;img src=&quot;http://www.lovehana.com/attach/1/7869723940.png&quot; alt=&quot;사용자 삽입 이미지&quot; height=&quot;286&quot; width=&quot;581&quot; /&gt;&lt;/div&gt;&lt;/P&gt;&lt;fieldset style=&quot;margin:20px 0px 20px 0px;padding:5px;&quot;&gt;&lt;legend&gt;&lt;span&gt;&lt;strong&gt;크리에이티브 커먼즈 라이센스&lt;/strong&gt;&lt;/span&gt;&lt;/legend&gt;&lt;!--Creative Commons License--&gt;&lt;div style=&quot;float: left; width: 88px; margin-top: 3px;&quot;&gt;&lt;a rel=&quot;license&quot; href=&quot;http://creativecommons.org/licenses/by-nc-nd/2.0/kr/&quot; target=_blank&gt;&lt;img alt=&quot;Creative Commons License&quot; style=&quot;border-width: 0&quot; src=&quot;http://i.creativecommons.org/l/by-nc-nd/2.0/kr/88x31.png&quot;/&gt;&lt;/a&gt;&lt;/div&gt;&lt;div style=&quot;margin-left: 92px; margin-top: 3px; text-align: justify;&quot;&gt;이 저작물은 &lt;a rel=&quot;license&quot; href=&quot;http://creativecommons.org/licenses/by-nc-nd/2.0/kr/&quot; target=_blank&gt;크리에이티브 커먼즈 코리아 저작자표시-비영리-변경금지 2.0 대한민국 라이센스&lt;/a&gt;에 따라 이용하실 수 있습니다.
			&lt;!-- Creative Commons License--&gt;
			&lt;!-- &lt;rdf:RDF xmlns=&quot;http://web.resource.org/cc/&quot; xmlns:dc=&quot;http://purl.org/dc/elements/1.1/&quot; xmlns:rdf=&quot;http://www.w3.org/1999/02/22-rdf-syntax-ns#&quot;&gt;
			&lt;Work rdf:about=&quot;&quot;&gt;
			&lt;license rdf:resource=&quot;http://creativecommons.org/licenses/by-nc-nd/2.0/kr/&quot; /&gt;
			&lt;/Work&gt;
			&lt;License rdf:about=&quot;http://creativecommons.org/licenses/by-nc-nd/&quot;&gt;
			&lt;permits rdf:resource=&quot;http://web.resource.org/cc/Reproduction&quot;/&gt;
			&lt;permits rdf:resource=&quot;http://web.resource.org/cc/Distribution&quot;/&gt;
			&lt;requires rdf:resource=&quot;http://web.resource.org/cc/Notice&quot;/&gt;
			&lt;requires rdf:resource=&quot;http://web.resource.org/cc/Attribution&quot;/&gt;&lt;prohibits rdf:resource=&quot;http://web.resource.org/cc/CommercialUse&quot;/&gt;&lt;/License&gt;&lt;/rdf:RDF&gt; --&gt;&lt;/div&gt;&lt;/fieldset&gt;</description>
			<category>WPF</category>
			<category>WPF</category>
			<author>(나는산)</author>
			<guid>http://lovehana.com/593</guid>
			<comments>http://lovehana.com/593#entry593comment</comments>
			<pubDate>Wed, 30 Dec 2009 14:47:07 +0900</pubDate>
		</item>
		<item>
			<title>POSTSHARP 소개</title>
			<link>http://lovehana.com/592</link>
			<description>사이트 : &lt;a href=&quot;http://www.postsharp.org/&quot;&gt;&lt;U&gt;&lt;FONT color=#800080&gt;http://www.postsharp.org/&lt;/FONT&gt;&lt;/U&gt;&lt;/a&gt;&lt;BR&gt;&lt;BR&gt;PostSharp은 여러분의 .NET 코드의 라인수를 줄이고, 논리적은 관계를 분리시켜 코드를 작성할 수 있도록 해줍니다. &lt;BR&gt;&lt;BR&gt;쉽게 얘기하면 일반화할 수 있는 코드를 Attribute로 작성할 수 있습니다.&lt;BR&gt;&lt;BR&gt;몇가지 예를 들겠습니다.&lt;BR&gt;&lt;BR&gt;(1) Trace : 트래이스할 수 있는 사용자 정의 Attribute&lt;BR&gt;
&lt;P style=&quot;LINE-HEIGHT: 18px; FONT-FAMILY: Consolas; COLOR: #646464; FONT-SIZE: 10pt; FONT-WEIGHT: normal&quot; class=Apple-style-span&gt;&lt;SPAN style=&quot;COLOR: #0000ff&quot;&gt;public&lt;/SPAN&gt;&amp;nbsp;&lt;FONT color=#0000ff&gt;class&lt;/FONT&gt;&amp;nbsp;&lt;FONT color=#2b91af&gt;TraceAttribute&lt;/FONT&gt;&amp;nbsp;: &lt;FONT color=#2b91af&gt;OnMethodBoundaryAspect &lt;BR&gt;&lt;SPAN style=&quot;COLOR: #646464&quot; class=Apple-style-span&gt;{&lt;FONT color=#0000ff&gt;&amp;nbsp;&lt;BR&gt;&lt;SPAN style=&quot;COLOR: #646464&quot; class=Apple-style-span&gt;&lt;FONT color=#0000ff&gt;&amp;nbsp; public&lt;/FONT&gt;&amp;nbsp;&lt;FONT color=#0000ff&gt;override&lt;/FONT&gt;&amp;nbsp;&lt;FONT color=#0000ff&gt;void&lt;/FONT&gt;&amp;nbsp;OnEntry( &lt;FONT color=#2b91af&gt;MethodExecutionEventArgs&lt;/FONT&gt;&amp;nbsp;eventArgs)&lt;FONT size=3&gt;&amp;nbsp;&lt;BR&gt;&lt;SPAN style=&quot;FONT-SIZE: 12px&quot; class=Apple-style-span&gt;&amp;nbsp; {&lt;FONT color=#2b91af&gt;&amp;nbsp;&lt;SPAN style=&quot;COLOR: #646464&quot; class=Apple-style-span&gt;&lt;FONT color=#2b91af&gt;Trace&lt;/FONT&gt;.TraceInformation(&lt;FONT color=#a31515&gt;&quot;Entering {0}.&quot;&lt;/FONT&gt;, eventArgs.Method);&lt;FONT color=#2b91af&gt;&amp;nbsp;&lt;SPAN style=&quot;COLOR: #646464&quot; class=Apple-style-span&gt;&amp;nbsp;} &lt;/SPAN&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/FONT&gt;&lt;/P&gt;
&lt;P style=&quot;LINE-HEIGHT: 18px; FONT-FAMILY: Consolas; COLOR: #646464; FONT-SIZE: 12px&quot; class=Apple-style-span&gt;&lt;FONT color=#0000ff&gt;&amp;nbsp; public&lt;/FONT&gt;&amp;nbsp;&lt;FONT color=#0000ff&gt;override&lt;/FONT&gt;&amp;nbsp;&lt;FONT color=#0000ff&gt;void&lt;/FONT&gt;&amp;nbsp;OnExit( &lt;FONT color=#2b91af&gt;MethodExecutionEventArgs&lt;/FONT&gt;&amp;nbsp;eventArgs) &lt;BR&gt;&amp;nbsp; {&lt;FONT color=#2b91af&gt;&amp;nbsp;&lt;/FONT&gt;&lt;FONT color=#2b91af&gt;Trace&lt;/FONT&gt;.TraceInformation(&lt;FONT color=#a31515&gt;&quot;Leaving {0}.&quot;&lt;/FONT&gt;, eventArgs.Method); &amp;nbsp; } &lt;BR&gt;}&lt;/P&gt;&lt;BR&gt;&lt;BR&gt;(2) Async : 특정 함수를 비동기로 만드는 사용자 정의 Attribute&lt;BR&gt;
&lt;P style=&quot;FONT-FAMILY: Consolas; FONT-SIZE: 10pt&quot;&gt;&lt;SPAN style=&quot;COLOR: blue&quot;&gt;public&lt;/SPAN&gt;&lt;SPAN&gt; &lt;SPAN style=&quot;COLOR: blue&quot;&gt;class&lt;/SPAN&gt; &lt;SPAN style=&quot;COLOR: #2b91af&quot;&gt;AsyncAttribute&lt;/SPAN&gt; : &lt;SPAN style=&quot;COLOR: #2b91af&quot;&gt;OnMethodInvocationAspect&lt;BR&gt;&lt;/SPAN&gt;{&lt;BR&gt;&lt;SPAN style=&quot;COLOR: blue&quot;&gt;&amp;nbsp; public&lt;/SPAN&gt; &lt;SPAN style=&quot;COLOR: blue&quot;&gt;override&lt;/SPAN&gt; &lt;SPAN style=&quot;COLOR: blue&quot;&gt;void&lt;/SPAN&gt; OnInvocation(&lt;SPAN style=&quot;COLOR: #2b91af&quot;&gt;MethodInvocationEventArgs&lt;/SPAN&gt; eventArgs)&lt;BR&gt;&amp;nbsp; {&lt;BR&gt;&lt;SPAN style=&quot;COLOR: #2b91af&quot;&gt;&amp;nbsp; &amp;nbsp; ThreadPool&lt;/SPAN&gt;.QueueUserWorkItem(&lt;SPAN style=&quot;COLOR: blue&quot;&gt;delegate&lt;/SPAN&gt; { eventArgs.Proceed(); });&lt;BR&gt;&amp;nbsp; }&lt;BR&gt;}&lt;/SPAN&gt;&lt;/P&gt;&lt;BR&gt;&lt;BR&gt;(3) GUI Dispatch : 특정 함수를 GUI 쓰레드에서 실행하게 하는 사용자 정의 Attribute&lt;BR&gt;
&lt;P style=&quot;LINE-HEIGHT: normal; FONT-FAMILY: Consolas; FONT-SIZE: 10pt&quot;&gt;&lt;SPAN style=&quot;COLOR: blue&quot;&gt;public&lt;/SPAN&gt;&lt;SPAN&gt; &lt;SPAN style=&quot;COLOR: blue&quot;&gt;class&lt;/SPAN&gt; &lt;SPAN style=&quot;COLOR: #2b91af&quot;&gt;GuiThreadAttribute&lt;/SPAN&gt; : &lt;SPAN style=&quot;COLOR: #2b91af&quot;&gt;OnMethodInvocationAspect&lt;BR&gt;&lt;/SPAN&gt;{&lt;BR&gt;&lt;SPAN style=&quot;COLOR: blue&quot;&gt;&amp;nbsp; public&lt;/SPAN&gt; &lt;SPAN style=&quot;COLOR: blue&quot;&gt;override&lt;/SPAN&gt; &lt;SPAN style=&quot;COLOR: blue&quot;&gt;void&lt;/SPAN&gt; OnInvocation(&lt;SPAN style=&quot;COLOR: #2b91af&quot;&gt;MethodInvocationEventArgs&lt;/SPAN&gt; eventArgs)&lt;BR&gt;&amp;nbsp; {&lt;BR&gt;&lt;SPAN style=&quot;COLOR: #2b91af&quot;&gt;&amp;nbsp; &amp;nbsp; DispatcherObject&lt;/SPAN&gt; dispatcherObject = (&lt;SPAN style=&quot;COLOR: #2b91af&quot;&gt;DispatcherObject&lt;/SPAN&gt;)eventArgs.Delegate.Target;&lt;/SPAN&gt;&lt;BR&gt;&lt;SPAN style=&quot;FONT-FAMILY: Consolas&quot;&gt;&lt;SPAN style=&quot;COLOR: blue&quot;&gt;&amp;nbsp; &amp;nbsp; if&lt;/SPAN&gt; (dispatcherObject.CheckAccess())&lt;BR&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; eventArgs.Proceed(); &lt;BR&gt;&lt;SPAN style=&quot;COLOR: blue&quot;&gt;&amp;nbsp; &amp;nbsp; else&lt;BR&gt;&lt;/SPAN&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; dispatcherObject.Dispatcher.Invoke(&lt;SPAN style=&quot;COLOR: #2b91af&quot;&gt; DispatcherPriority&lt;/SPAN&gt;.Normal,&lt;SPAN style=&quot;COLOR: blue&quot;&gt; &lt;BR&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; new&lt;/SPAN&gt; &lt;SPAN style=&quot;COLOR: #2b91af&quot;&gt;Action&lt;/SPAN&gt;(() =&amp;gt; eventArgs.Proceed()));&lt;BR&gt;&amp;nbsp; }&lt;BR&gt;}&lt;/SPAN&gt;&lt;/P&gt;&lt;BR&gt;(4) Exception : 예외를 처리하는 사용자 정의 Attribute&lt;BR&gt;
&lt;P style=&quot;FONT-FAMILY: Consolas; FONT-SIZE: 10pt&quot;&gt;&lt;SPAN style=&quot;COLOR: blue&quot;&gt;public&lt;/SPAN&gt;&lt;SPAN&gt; &lt;SPAN style=&quot;COLOR: blue&quot;&gt;class&lt;/SPAN&gt; &lt;SPAN style=&quot;COLOR: #2b91af&quot;&gt;ExceptionDialogAttribute&lt;/SPAN&gt; : &lt;SPAN style=&quot;COLOR: #2b91af&quot;&gt;OnExceptionAspect&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;SPAN style=&quot;FONT-FAMILY: Consolas&quot;&gt;&lt;BR&gt;{&lt;SPAN&gt;&lt;BR&gt;&lt;/SPAN&gt;&lt;SPAN style=&quot;COLOR: blue&quot;&gt;&amp;nbsp; public&lt;/SPAN&gt; &lt;SPAN style=&quot;COLOR: blue&quot;&gt;override&lt;/SPAN&gt; &lt;SPAN style=&quot;COLOR: blue&quot;&gt;void&lt;/SPAN&gt; OnException(&lt;SPAN style=&quot;COLOR: #2b91af&quot;&gt;MethodExecutionEventArgs&lt;/SPAN&gt; eventArgs)&lt;SPAN&gt;&lt;BR&gt;&lt;/SPAN&gt;&amp;nbsp; {&lt;SPAN&gt;&lt;BR&gt;&lt;/SPAN&gt;&lt;SPAN style=&quot;COLOR: blue&quot;&gt;&amp;nbsp; &amp;nbsp; string&lt;/SPAN&gt; message = eventArgs.Exception.Message;&lt;BR&gt;&lt;SPAN style=&quot;COLOR: #2b91af&quot;&gt;&amp;nbsp; &amp;nbsp; Window&lt;/SPAN&gt; window = &lt;SPAN style=&quot;COLOR: #2b91af&quot;&gt;Window&lt;/SPAN&gt;.GetWindow((&lt;SPAN style=&quot;COLOR: #2b91af&quot;&gt;DependencyObject&lt;/SPAN&gt;) eventArgs.Instance);&lt;BR&gt;&lt;SPAN style=&quot;COLOR: #2b91af&quot;&gt;&amp;nbsp; &amp;nbsp; MessageBox&lt;/SPAN&gt;.Show(window, message, &lt;SPAN style=&quot;COLOR: #a31515&quot;&gt;&quot;Exception&quot;&lt;/SPAN&gt;);&lt;BR&gt;&amp;nbsp; &amp;nbsp; &lt;/SPAN&gt;&lt;SPAN style=&quot;FONT-FAMILY: Consolas&quot;&gt;eventArgs.FlowBehavior = &lt;SPAN style=&quot;COLOR: #2b91af&quot;&gt;FlowBehavior&lt;/SPAN&gt;.Continue;&lt;SPAN&gt;&lt;BR&gt;&lt;/SPAN&gt;&amp;nbsp; }&lt;/SPAN&gt;&lt;SPAN style=&quot;FONT-FAMILY: Consolas&quot;&gt;&lt;BR&gt;}&lt;/SPAN&gt;&lt;/P&gt;&lt;BR&gt;&lt;BR&gt;(5) Cache : 캐쉬를 하는 사용자 정의 Attribute&lt;BR&gt;&lt;BR&gt;&lt;SPAN style=&quot;FONT-FAMILY: Consolas; COLOR: blue; FONT-SIZE: 10pt&quot;&gt;public&lt;/SPAN&gt;&lt;SPAN style=&quot;FONT-FAMILY: Consolas; FONT-SIZE: 10pt&quot;&gt; &lt;SPAN style=&quot;COLOR: blue&quot;&gt;class&lt;/SPAN&gt; &lt;SPAN style=&quot;COLOR: #2b91af&quot;&gt;CacheAttribute&lt;/SPAN&gt; : &lt;SPAN style=&quot;COLOR: #2b91af&quot;&gt;OnMethodInvocationAspect&lt;BR&gt;&lt;/SPAN&gt;{&lt;BR&gt;&amp;nbsp; &amp;nbsp; &lt;SPAN style=&quot;COLOR: blue&quot;&gt;public&lt;/SPAN&gt; &lt;SPAN style=&quot;COLOR: blue&quot;&gt;override&lt;/SPAN&gt; &lt;SPAN style=&quot;COLOR: blue&quot;&gt;void&lt;/SPAN&gt; OnInvocation(&lt;SPAN style=&quot;COLOR: #2b91af&quot;&gt;MethodInvocationEventArgs&lt;/SPAN&gt; eventArgs)&lt;BR&gt;&amp;nbsp; &amp;nbsp; {&lt;BR&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;SPAN style=&quot;COLOR: blue&quot;&gt;object&lt;/SPAN&gt; value; &lt;BR&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;SPAN style=&quot;COLOR: blue&quot;&gt;string&lt;/SPAN&gt; key = &lt;SPAN style=&quot;COLOR: green&quot;&gt;// Compute the cache key (details omitted).&lt;BR&gt;&lt;/SPAN&gt;&lt;BR&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;SPAN style=&quot;COLOR: blue&quot;&gt;if&lt;/SPAN&gt; (!cache.TryGetValue(key, &lt;SPAN style=&quot;COLOR: blue&quot;&gt;out&lt;/SPAN&gt; value))&lt;BR&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; { &lt;BR&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;SPAN style=&quot;COLOR: blue&quot;&gt;lock&lt;/SPAN&gt; ( &lt;SPAN style=&quot;COLOR: blue&quot;&gt;this&lt;/SPAN&gt; )&lt;BR&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; { &lt;BR&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;SPAN style=&quot;COLOR: blue&quot;&gt;if&lt;/SPAN&gt; (!cache.TryGetValue(key, &lt;SPAN style=&quot;COLOR: blue&quot;&gt;out&lt;/SPAN&gt; value))&lt;BR&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; { &amp;nbsp; &lt;BR&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; eventArgs.Proceed();&lt;BR&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; value = eventArgs.ReturnValue;&lt;BR&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; cache.Add(key, value);&lt;BR&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;SPAN style=&quot;COLOR: blue&quot;&gt;return&lt;/SPAN&gt;;&lt;BR&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; } &lt;BR&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; } &lt;BR&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; }&lt;BR&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; eventArgs.ReturnValue = value;&lt;BR&gt;&amp;nbsp; &amp;nbsp; }&lt;BR&gt;&lt;/SPAN&gt;&lt;SPAN style=&quot;LINE-HEIGHT: 115%; FONT-FAMILY: Consolas; FONT-SIZE: 10pt&quot;&gt;}&lt;/SPAN&gt; &lt;BR&gt;&lt;BR&gt;저는 실제로 INotifyPropertyChanged를 구현할때 일일히 속성을 정의하는게 귀찮아서 &lt;BR&gt;어떻게 Attribute로 할 수 없을까 구글로 검색했는데 PostSharp를 사용하면 쉽게 할수 있었습니다.&lt;BR&gt;&lt;BR&gt;&lt;a href=&quot;http://code.google.com/p/propfu/&quot;&gt;&lt;U&gt;&lt;FONT color=#800080&gt;http://code.google.com/p/propfu/&lt;/FONT&gt;&lt;/U&gt;&lt;/a&gt;&lt;BR&gt;&lt;BR&gt;&lt;BR&gt;윈래 이런 코드가&lt;BR&gt;&lt;BR&gt;&lt;SPAN class=kwd&gt;&lt;FONT color=#000088&gt;public&lt;/FONT&gt;&lt;/SPAN&gt;&lt;SPAN class=pln&gt; &lt;/SPAN&gt;&lt;SPAN class=kwd&gt;&lt;FONT color=#000088&gt;class&lt;/FONT&gt;&lt;/SPAN&gt;&lt;SPAN class=pln&gt; &lt;/SPAN&gt;&lt;SPAN class=typ&gt;&lt;FONT color=#660066&gt;PersonLame&lt;/FONT&gt;&lt;/SPAN&gt;&lt;SPAN class=pln&gt; &lt;/SPAN&gt;&lt;SPAN class=pun&gt;&lt;FONT color=#666600&gt;:&lt;/FONT&gt;&lt;/SPAN&gt;&lt;SPAN class=pln&gt; &lt;/SPAN&gt;&lt;SPAN class=typ&gt;&lt;FONT color=#660066&gt;INotifyPropertyChanged&lt;/FONT&gt;&lt;/SPAN&gt;&lt;SPAN class=pln&gt;&lt;BR&gt;&amp;nbsp; &amp;nbsp; &lt;/SPAN&gt;&lt;SPAN class=pun&gt;&lt;FONT color=#666600&gt;{&lt;/FONT&gt;&lt;/SPAN&gt;&lt;SPAN class=pln&gt;&lt;BR&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/SPAN&gt;&lt;SPAN class=kwd&gt;&lt;FONT color=#000088&gt;private&lt;/FONT&gt;&lt;/SPAN&gt;&lt;SPAN class=pln&gt; &lt;/SPAN&gt;&lt;SPAN class=kwd&gt;&lt;FONT color=#000088&gt;string&lt;/FONT&gt;&lt;/SPAN&gt;&lt;SPAN class=pln&gt; _name&lt;/SPAN&gt;&lt;SPAN class=pun&gt;&lt;FONT color=#666600&gt;;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;SPAN class=pln&gt;&lt;BR&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/SPAN&gt;&lt;SPAN class=kwd&gt;&lt;FONT color=#000088&gt;public&lt;/FONT&gt;&lt;/SPAN&gt;&lt;SPAN class=pln&gt; &lt;/SPAN&gt;&lt;SPAN class=kwd&gt;&lt;FONT color=#000088&gt;string&lt;/FONT&gt;&lt;/SPAN&gt;&lt;SPAN class=pln&gt; &lt;/SPAN&gt;&lt;SPAN class=typ&gt;&lt;FONT color=#660066&gt;Name&lt;/FONT&gt;&lt;/SPAN&gt;&lt;SPAN class=pln&gt;&lt;BR&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/SPAN&gt;&lt;SPAN class=pun&gt;&lt;FONT color=#666600&gt;{&lt;/FONT&gt;&lt;/SPAN&gt;&lt;SPAN class=pln&gt;&lt;BR&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/SPAN&gt;&lt;SPAN class=kwd&gt;&lt;FONT color=#000088&gt;get&lt;/FONT&gt;&lt;/SPAN&gt;&lt;SPAN class=pln&gt; &lt;/SPAN&gt;&lt;SPAN class=pun&gt;&lt;FONT color=#666600&gt;{&lt;/FONT&gt;&lt;/SPAN&gt;&lt;SPAN class=pln&gt; &lt;/SPAN&gt;&lt;SPAN class=kwd&gt;&lt;FONT color=#000088&gt;return&lt;/FONT&gt;&lt;/SPAN&gt;&lt;SPAN class=pln&gt; _name&lt;/SPAN&gt;&lt;SPAN class=pun&gt;&lt;FONT color=#666600&gt;;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;SPAN class=pln&gt; &lt;/SPAN&gt;&lt;SPAN class=pun&gt;&lt;FONT color=#666600&gt;}&lt;/FONT&gt;&lt;/SPAN&gt;&lt;SPAN class=pln&gt;&lt;BR&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/SPAN&gt;&lt;SPAN class=kwd&gt;&lt;FONT color=#000088&gt;set&lt;/FONT&gt;&lt;/SPAN&gt;&lt;SPAN class=pln&gt;&lt;BR&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/SPAN&gt;&lt;SPAN class=pun&gt;&lt;FONT color=#666600&gt;{&lt;/FONT&gt;&lt;/SPAN&gt;&lt;SPAN class=pln&gt;&lt;BR&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/SPAN&gt;&lt;SPAN class=kwd&gt;&lt;FONT color=#000088&gt;if&lt;/FONT&gt;&lt;/SPAN&gt;&lt;SPAN class=pln&gt; &lt;/SPAN&gt;&lt;SPAN class=pun&gt;&lt;FONT color=#666600&gt;(&lt;/FONT&gt;&lt;/SPAN&gt;&lt;SPAN class=pln&gt;value &lt;/SPAN&gt;&lt;SPAN class=pun&gt;&lt;FONT color=#666600&gt;==&lt;/FONT&gt;&lt;/SPAN&gt;&lt;SPAN class=pln&gt; _name&lt;/SPAN&gt;&lt;SPAN class=pun&gt;&lt;FONT color=#666600&gt;)&lt;/FONT&gt;&lt;/SPAN&gt;&lt;SPAN class=pln&gt;&lt;BR&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/SPAN&gt;&lt;SPAN class=kwd&gt;&lt;FONT color=#000088&gt;return&lt;/FONT&gt;&lt;/SPAN&gt;&lt;SPAN class=pun&gt;&lt;FONT color=#666600&gt;;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;SPAN class=pln&gt;&lt;BR&gt;&lt;BR&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; _name &lt;/SPAN&gt;&lt;SPAN class=pun&gt;&lt;FONT color=#666600&gt;=&lt;/FONT&gt;&lt;/SPAN&gt;&lt;SPAN class=pln&gt; value&lt;/SPAN&gt;&lt;SPAN class=pun&gt;&lt;FONT color=#666600&gt;;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;SPAN class=pln&gt;&lt;BR&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/SPAN&gt;&lt;SPAN class=typ&gt;&lt;FONT color=#660066&gt;OnPropertyChanged&lt;/FONT&gt;&lt;/SPAN&gt;&lt;SPAN class=pun&gt;&lt;FONT color=#666600&gt;(&lt;/FONT&gt;&lt;/SPAN&gt;&lt;SPAN class=str&gt;&lt;FONT color=#008800&gt;&quot;Name&quot;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;SPAN class=pun&gt;&lt;FONT color=#666600&gt;);&lt;/FONT&gt;&lt;/SPAN&gt;&lt;SPAN class=pln&gt;&lt;BR&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/SPAN&gt;&lt;SPAN class=pun&gt;&lt;FONT color=#666600&gt;}&lt;/FONT&gt;&lt;/SPAN&gt;&lt;SPAN class=pln&gt;&lt;BR&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/SPAN&gt;&lt;SPAN class=pun&gt;&lt;FONT color=#666600&gt;}&lt;/FONT&gt;&lt;/SPAN&gt;&lt;SPAN class=pln&gt;&lt;BR&gt;&lt;BR&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/SPAN&gt;&lt;SPAN class=kwd&gt;&lt;FONT color=#000088&gt;private&lt;/FONT&gt;&lt;/SPAN&gt;&lt;SPAN class=pln&gt; &lt;/SPAN&gt;&lt;SPAN class=kwd&gt;&lt;FONT color=#000088&gt;int&lt;/FONT&gt;&lt;/SPAN&gt;&lt;SPAN class=pln&gt; _age&lt;/SPAN&gt;&lt;SPAN class=pun&gt;&lt;FONT color=#666600&gt;;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;SPAN class=pln&gt;&lt;BR&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/SPAN&gt;&lt;SPAN class=kwd&gt;&lt;FONT color=#000088&gt;public&lt;/FONT&gt;&lt;/SPAN&gt;&lt;SPAN class=pln&gt; &lt;/SPAN&gt;&lt;SPAN class=kwd&gt;&lt;FONT color=#000088&gt;int&lt;/FONT&gt;&lt;/SPAN&gt;&lt;SPAN class=pln&gt; &lt;/SPAN&gt;&lt;SPAN class=typ&gt;&lt;FONT color=#660066&gt;Age&lt;/FONT&gt;&lt;/SPAN&gt;&lt;SPAN class=pln&gt;&lt;BR&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/SPAN&gt;&lt;SPAN class=pun&gt;&lt;FONT color=#666600&gt;{&lt;/FONT&gt;&lt;/SPAN&gt;&lt;SPAN class=pln&gt;&lt;BR&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/SPAN&gt;&lt;SPAN class=kwd&gt;&lt;FONT color=#000088&gt;get&lt;/FONT&gt;&lt;/SPAN&gt;&lt;SPAN class=pln&gt; &lt;/SPAN&gt;&lt;SPAN class=pun&gt;&lt;FONT color=#666600&gt;{&lt;/FONT&gt;&lt;/SPAN&gt;&lt;SPAN class=pln&gt; &lt;/SPAN&gt;&lt;SPAN class=kwd&gt;&lt;FONT color=#000088&gt;return&lt;/FONT&gt;&lt;/SPAN&gt;&lt;SPAN class=pln&gt; _age&lt;/SPAN&gt;&lt;SPAN class=pun&gt;&lt;FONT color=#666600&gt;;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;SPAN class=pln&gt; &lt;/SPAN&gt;&lt;SPAN class=pun&gt;&lt;FONT color=#666600&gt;}&lt;/FONT&gt;&lt;/SPAN&gt;&lt;SPAN class=pln&gt;&lt;BR&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/SPAN&gt;&lt;SPAN class=kwd&gt;&lt;FONT color=#000088&gt;set&lt;/FONT&gt;&lt;/SPAN&gt;&lt;SPAN class=pln&gt;&lt;BR&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/SPAN&gt;&lt;SPAN class=pun&gt;&lt;FONT color=#666600&gt;{&lt;/FONT&gt;&lt;/SPAN&gt;&lt;SPAN class=pln&gt;&lt;BR&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/SPAN&gt;&lt;SPAN class=kwd&gt;&lt;FONT color=#000088&gt;if&lt;/FONT&gt;&lt;/SPAN&gt;&lt;SPAN class=pln&gt; &lt;/SPAN&gt;&lt;SPAN class=pun&gt;&lt;FONT color=#666600&gt;(&lt;/FONT&gt;&lt;/SPAN&gt;&lt;SPAN class=pln&gt;value &lt;/SPAN&gt;&lt;SPAN class=pun&gt;&lt;FONT color=#666600&gt;==&lt;/FONT&gt;&lt;/SPAN&gt;&lt;SPAN class=pln&gt; _age&lt;/SPAN&gt;&lt;SPAN class=pun&gt;&lt;FONT color=#666600&gt;)&lt;/FONT&gt;&lt;/SPAN&gt;&lt;SPAN class=pln&gt;&lt;BR&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/SPAN&gt;&lt;SPAN class=kwd&gt;&lt;FONT color=#000088&gt;return&lt;/FONT&gt;&lt;/SPAN&gt;&lt;SPAN class=pun&gt;&lt;FONT color=#666600&gt;;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;SPAN class=pln&gt;&lt;BR&gt;&lt;BR&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; _age &lt;/SPAN&gt;&lt;SPAN class=pun&gt;&lt;FONT color=#666600&gt;=&lt;/FONT&gt;&lt;/SPAN&gt;&lt;SPAN class=pln&gt; value&lt;/SPAN&gt;&lt;SPAN class=pun&gt;&lt;FONT color=#666600&gt;;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;SPAN class=pln&gt;&lt;BR&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/SPAN&gt;&lt;SPAN class=typ&gt;&lt;FONT color=#660066&gt;OnPropertyChanged&lt;/FONT&gt;&lt;/SPAN&gt;&lt;SPAN class=pun&gt;&lt;FONT color=#666600&gt;(&lt;/FONT&gt;&lt;/SPAN&gt;&lt;SPAN class=str&gt;&lt;FONT color=#008800&gt;&quot;Age&quot;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;SPAN class=pun&gt;&lt;FONT color=#666600&gt;);&lt;/FONT&gt;&lt;/SPAN&gt;&lt;SPAN class=pln&gt;&lt;BR&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/SPAN&gt;&lt;SPAN class=pun&gt;&lt;FONT color=#666600&gt;}&lt;/FONT&gt;&lt;/SPAN&gt;&lt;SPAN class=pln&gt;&lt;BR&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/SPAN&gt;&lt;SPAN class=pun&gt;&lt;FONT color=#666600&gt;}&lt;/FONT&gt;&lt;/SPAN&gt;&lt;SPAN class=pln&gt;&lt;BR&gt;&lt;BR&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/SPAN&gt;&lt;SPAN class=com&gt;&lt;FONT color=#880000&gt;#region INotifyPropertyChanged Members&lt;/FONT&gt;&lt;/SPAN&gt;&lt;SPAN class=pln&gt;&lt;BR&gt;&lt;BR&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/SPAN&gt;&lt;SPAN class=kwd&gt;&lt;FONT color=#000088&gt;public&lt;/FONT&gt;&lt;/SPAN&gt;&lt;SPAN class=pln&gt; &lt;/SPAN&gt;&lt;SPAN class=kwd&gt;&lt;FONT color=#000088&gt;event&lt;/FONT&gt;&lt;/SPAN&gt;&lt;SPAN class=pln&gt; &lt;/SPAN&gt;&lt;SPAN class=typ&gt;&lt;FONT color=#660066&gt;PropertyChangedEventHandler&lt;/FONT&gt;&lt;/SPAN&gt;&lt;SPAN class=pln&gt; &lt;/SPAN&gt;&lt;SPAN class=typ&gt;&lt;FONT color=#660066&gt;PropertyChanged&lt;/FONT&gt;&lt;/SPAN&gt;&lt;SPAN class=pun&gt;&lt;FONT color=#666600&gt;;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;SPAN class=pln&gt;&lt;BR&gt;&lt;BR&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/SPAN&gt;&lt;SPAN class=com&gt;&lt;FONT color=#880000&gt;#endregion&lt;/FONT&gt;&lt;/SPAN&gt;&lt;SPAN class=pln&gt;&lt;BR&gt;&lt;BR&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/SPAN&gt;&lt;SPAN class=kwd&gt;&lt;FONT color=#000088&gt;private&lt;/FONT&gt;&lt;/SPAN&gt;&lt;SPAN class=pln&gt; &lt;/SPAN&gt;&lt;SPAN class=kwd&gt;&lt;FONT color=#000088&gt;void&lt;/FONT&gt;&lt;/SPAN&gt;&lt;SPAN class=pln&gt; &lt;/SPAN&gt;&lt;SPAN class=typ&gt;&lt;FONT color=#660066&gt;OnPropertyChanged&lt;/FONT&gt;&lt;/SPAN&gt;&lt;SPAN class=pun&gt;&lt;FONT color=#666600&gt;(&lt;/FONT&gt;&lt;/SPAN&gt;&lt;SPAN class=kwd&gt;&lt;FONT color=#000088&gt;string&lt;/FONT&gt;&lt;/SPAN&gt;&lt;SPAN class=pln&gt; propertyName&lt;/SPAN&gt;&lt;SPAN class=pun&gt;&lt;FONT color=#666600&gt;)&lt;/FONT&gt;&lt;/SPAN&gt;&lt;SPAN class=pln&gt;&lt;BR&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/SPAN&gt;&lt;SPAN class=pun&gt;&lt;FONT color=#666600&gt;{&lt;/FONT&gt;&lt;/SPAN&gt;&lt;SPAN class=pln&gt;&lt;BR&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/SPAN&gt;&lt;SPAN class=kwd&gt;&lt;FONT color=#000088&gt;if&lt;/FONT&gt;&lt;/SPAN&gt;&lt;SPAN class=pln&gt; &lt;/SPAN&gt;&lt;SPAN class=pun&gt;&lt;FONT color=#666600&gt;(&lt;/FONT&gt;&lt;/SPAN&gt;&lt;SPAN class=typ&gt;&lt;FONT color=#660066&gt;PropertyChanged&lt;/FONT&gt;&lt;/SPAN&gt;&lt;SPAN class=pln&gt; &lt;/SPAN&gt;&lt;SPAN class=pun&gt;&lt;FONT color=#666600&gt;==&lt;/FONT&gt;&lt;/SPAN&gt;&lt;SPAN class=pln&gt; &lt;/SPAN&gt;&lt;SPAN class=kwd&gt;&lt;FONT color=#000088&gt;null&lt;/FONT&gt;&lt;/SPAN&gt;&lt;SPAN class=pun&gt;&lt;FONT color=#666600&gt;)&lt;/FONT&gt;&lt;/SPAN&gt;&lt;SPAN class=pln&gt;&lt;BR&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/SPAN&gt;&lt;SPAN class=kwd&gt;&lt;FONT color=#000088&gt;return&lt;/FONT&gt;&lt;/SPAN&gt;&lt;SPAN class=pun&gt;&lt;FONT color=#666600&gt;;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;SPAN class=pln&gt;&lt;BR&gt;&lt;BR&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/SPAN&gt;&lt;SPAN class=typ&gt;&lt;FONT color=#660066&gt;PropertyChanged&lt;/FONT&gt;&lt;/SPAN&gt;&lt;SPAN class=pun&gt;&lt;FONT color=#666600&gt;(&lt;/FONT&gt;&lt;/SPAN&gt;&lt;SPAN class=kwd&gt;&lt;FONT color=#000088&gt;this&lt;/FONT&gt;&lt;/SPAN&gt;&lt;SPAN class=pun&gt;&lt;FONT color=#666600&gt;,&lt;/FONT&gt;&lt;/SPAN&gt;&lt;SPAN class=pln&gt; &lt;/SPAN&gt;&lt;SPAN class=kwd&gt;&lt;FONT color=#000088&gt;new&lt;/FONT&gt;&lt;/SPAN&gt;&lt;SPAN class=pln&gt; &lt;/SPAN&gt;&lt;SPAN class=typ&gt;&lt;FONT color=#660066&gt;PropertyChangedEventArgs&lt;/FONT&gt;&lt;/SPAN&gt;&lt;SPAN class=pun&gt;&lt;FONT color=#666600&gt;(&lt;/FONT&gt;&lt;/SPAN&gt;&lt;SPAN class=pln&gt;propertyName&lt;/SPAN&gt;&lt;SPAN class=pun&gt;&lt;FONT color=#666600&gt;));&lt;/FONT&gt;&lt;/SPAN&gt;&lt;SPAN class=pln&gt;&lt;BR&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/SPAN&gt;&lt;SPAN class=pun&gt;&lt;FONT color=#666600&gt;}&lt;/FONT&gt;&lt;/SPAN&gt;&lt;SPAN class=pln&gt;&lt;BR&gt;&amp;nbsp; &amp;nbsp; &lt;/SPAN&gt;&lt;SPAN class=pun&gt;&lt;FONT color=#666600&gt;}&lt;/FONT&gt;&lt;/SPAN&gt;&lt;BR&gt;&lt;BR&gt;다음 코드로 정리 됩니다.&lt;BR&gt;&lt;BR&gt;&lt;BR&gt;&lt;SPAN class=pun&gt;&lt;FONT color=#666600&gt;[&lt;/FONT&gt;&lt;/SPAN&gt;&lt;SPAN class=typ&gt;&lt;FONT color=#660066&gt;NotifyPropertyChanged&lt;/FONT&gt;&lt;/SPAN&gt;&lt;SPAN class=pun&gt;&lt;FONT color=#666600&gt;]&lt;/FONT&gt;&lt;/SPAN&gt;&lt;SPAN class=pln&gt;&lt;BR&gt;&amp;nbsp; &amp;nbsp; &lt;/SPAN&gt;&lt;SPAN class=kwd&gt;&lt;FONT color=#000088&gt;public&lt;/FONT&gt;&lt;/SPAN&gt;&lt;SPAN class=pln&gt; &lt;/SPAN&gt;&lt;SPAN class=kwd&gt;&lt;FONT color=#000088&gt;class&lt;/FONT&gt;&lt;/SPAN&gt;&lt;SPAN class=pln&gt; &lt;/SPAN&gt;&lt;SPAN class=typ&gt;&lt;FONT color=#660066&gt;PersonAwesome&lt;/FONT&gt;&lt;/SPAN&gt;&lt;SPAN class=pln&gt; &lt;/SPAN&gt;&lt;SPAN class=pun&gt;&lt;FONT color=#666600&gt;:&lt;/FONT&gt;&lt;/SPAN&gt;&lt;SPAN class=pln&gt; &lt;/SPAN&gt;&lt;SPAN class=typ&gt;&lt;FONT color=#660066&gt;INotifyPropertyChanged&lt;/FONT&gt;&lt;/SPAN&gt;&lt;SPAN class=pln&gt;&lt;BR&gt;&amp;nbsp; &amp;nbsp; &lt;/SPAN&gt;&lt;SPAN class=pun&gt;&lt;FONT color=#666600&gt;{&lt;/FONT&gt;&lt;/SPAN&gt;&lt;SPAN class=pln&gt;&lt;BR&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/SPAN&gt;&lt;SPAN class=kwd&gt;&lt;FONT color=#000088&gt;public&lt;/FONT&gt;&lt;/SPAN&gt;&lt;SPAN class=pln&gt; &lt;/SPAN&gt;&lt;SPAN class=kwd&gt;&lt;FONT color=#000088&gt;string&lt;/FONT&gt;&lt;/SPAN&gt;&lt;SPAN class=pln&gt; &lt;/SPAN&gt;&lt;SPAN class=typ&gt;&lt;FONT color=#660066&gt;Name&lt;/FONT&gt;&lt;/SPAN&gt;&lt;SPAN class=pln&gt; &lt;/SPAN&gt;&lt;SPAN class=pun&gt;&lt;FONT color=#666600&gt;{&lt;/FONT&gt;&lt;/SPAN&gt;&lt;SPAN class=pln&gt; &lt;/SPAN&gt;&lt;SPAN class=kwd&gt;&lt;FONT color=#000088&gt;get&lt;/FONT&gt;&lt;/SPAN&gt;&lt;SPAN class=pun&gt;&lt;FONT color=#666600&gt;;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;SPAN class=pln&gt; &lt;/SPAN&gt;&lt;SPAN class=kwd&gt;&lt;FONT color=#000088&gt;set&lt;/FONT&gt;&lt;/SPAN&gt;&lt;SPAN class=pun&gt;&lt;FONT color=#666600&gt;;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;SPAN class=pln&gt; &lt;/SPAN&gt;&lt;SPAN class=pun&gt;&lt;FONT color=#666600&gt;}&lt;/FONT&gt;&lt;/SPAN&gt;&lt;SPAN class=pln&gt;&lt;BR&gt;&lt;BR&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/SPAN&gt;&lt;SPAN class=kwd&gt;&lt;FONT color=#000088&gt;public&lt;/FONT&gt;&lt;/SPAN&gt;&lt;SPAN class=pln&gt; &lt;/SPAN&gt;&lt;SPAN class=kwd&gt;&lt;FONT color=#000088&gt;int&lt;/FONT&gt;&lt;/SPAN&gt;&lt;SPAN class=pln&gt; &lt;/SPAN&gt;&lt;SPAN class=typ&gt;&lt;FONT color=#660066&gt;Age&lt;/FONT&gt;&lt;/SPAN&gt;&lt;SPAN class=pln&gt; &lt;/SPAN&gt;&lt;SPAN class=pun&gt;&lt;FONT color=#666600&gt;{&lt;/FONT&gt;&lt;/SPAN&gt;&lt;SPAN class=pln&gt; &lt;/SPAN&gt;&lt;SPAN class=kwd&gt;&lt;FONT color=#000088&gt;get&lt;/FONT&gt;&lt;/SPAN&gt;&lt;SPAN class=pun&gt;&lt;FONT color=#666600&gt;;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;SPAN class=pln&gt; &lt;/SPAN&gt;&lt;SPAN class=kwd&gt;&lt;FONT color=#000088&gt;set&lt;/FONT&gt;&lt;/SPAN&gt;&lt;SPAN class=pun&gt;&lt;FONT color=#666600&gt;;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;SPAN class=pln&gt; &lt;/SPAN&gt;&lt;SPAN class=pun&gt;&lt;FONT color=#666600&gt;}&lt;/FONT&gt;&lt;/SPAN&gt;&lt;SPAN class=pln&gt;&lt;BR&gt;&lt;BR&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/SPAN&gt;&lt;SPAN class=com&gt;&lt;FONT color=#880000&gt;#region INotifyPropertyChanged Members&lt;/FONT&gt;&lt;/SPAN&gt;&lt;SPAN class=pln&gt;&lt;BR&gt;&lt;BR&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/SPAN&gt;&lt;SPAN class=kwd&gt;&lt;FONT color=#000088&gt;public&lt;/FONT&gt;&lt;/SPAN&gt;&lt;SPAN class=pln&gt; &lt;/SPAN&gt;&lt;SPAN class=kwd&gt;&lt;FONT color=#000088&gt;event&lt;/FONT&gt;&lt;/SPAN&gt;&lt;SPAN class=pln&gt; &lt;/SPAN&gt;&lt;SPAN class=typ&gt;&lt;FONT color=#660066&gt;PropertyChangedEventHandler&lt;/FONT&gt;&lt;/SPAN&gt;&lt;SPAN class=pln&gt; &lt;/SPAN&gt;&lt;SPAN class=typ&gt;&lt;FONT color=#660066&gt;PropertyChanged&lt;/FONT&gt;&lt;/SPAN&gt;&lt;SPAN class=pun&gt;&lt;FONT color=#666600&gt;;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;SPAN class=pln&gt;&lt;BR&gt;&lt;BR&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/SPAN&gt;&lt;SPAN class=com&gt;&lt;FONT color=#880000&gt;#endregion&lt;/FONT&gt;&lt;/SPAN&gt;&lt;SPAN class=pln&gt;&lt;BR&gt;&lt;BR&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/SPAN&gt;&lt;SPAN class=pun&gt;&lt;FONT color=#666600&gt;[&lt;/FONT&gt;&lt;/SPAN&gt;&lt;SPAN class=typ&gt;&lt;FONT color=#660066&gt;OnPropertyChanged&lt;/FONT&gt;&lt;/SPAN&gt;&lt;SPAN class=pun&gt;&lt;FONT color=#666600&gt;]&lt;/FONT&gt;&lt;/SPAN&gt;&lt;SPAN class=pln&gt;&lt;BR&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/SPAN&gt;&lt;SPAN class=kwd&gt;&lt;FONT color=#000088&gt;private&lt;/FONT&gt;&lt;/SPAN&gt;&lt;SPAN class=pln&gt; &lt;/SPAN&gt;&lt;SPAN class=kwd&gt;&lt;FONT color=#000088&gt;void&lt;/FONT&gt;&lt;/SPAN&gt;&lt;SPAN class=pln&gt; &lt;/SPAN&gt;&lt;SPAN class=typ&gt;&lt;FONT color=#660066&gt;OnPropertyChanged&lt;/FONT&gt;&lt;/SPAN&gt;&lt;SPAN class=pun&gt;&lt;FONT color=#666600&gt;(&lt;/FONT&gt;&lt;/SPAN&gt;&lt;SPAN class=kwd&gt;&lt;FONT color=#000088&gt;string&lt;/FONT&gt;&lt;/SPAN&gt;&lt;SPAN class=pln&gt; propertyName&lt;/SPAN&gt;&lt;SPAN class=pun&gt;&lt;FONT color=#666600&gt;)&lt;/FONT&gt;&lt;/SPAN&gt;&lt;SPAN class=pln&gt;&lt;BR&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/SPAN&gt;&lt;SPAN class=pun&gt;&lt;FONT color=#666600&gt;{&lt;/FONT&gt;&lt;/SPAN&gt;&lt;SPAN class=pln&gt;&lt;BR&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/SPAN&gt;&lt;SPAN class=kwd&gt;&lt;FONT color=#000088&gt;if&lt;/FONT&gt;&lt;/SPAN&gt;&lt;SPAN class=pln&gt; &lt;/SPAN&gt;&lt;SPAN class=pun&gt;&lt;FONT color=#666600&gt;(&lt;/FONT&gt;&lt;/SPAN&gt;&lt;SPAN class=typ&gt;&lt;FONT color=#660066&gt;PropertyChanged&lt;/FONT&gt;&lt;/SPAN&gt;&lt;SPAN class=pln&gt; &lt;/SPAN&gt;&lt;SPAN class=pun&gt;&lt;FONT color=#666600&gt;==&lt;/FONT&gt;&lt;/SPAN&gt;&lt;SPAN class=pln&gt; &lt;/SPAN&gt;&lt;SPAN class=kwd&gt;&lt;FONT color=#000088&gt;null&lt;/FONT&gt;&lt;/SPAN&gt;&lt;SPAN class=pun&gt;&lt;FONT color=#666600&gt;)&lt;/FONT&gt;&lt;/SPAN&gt;&lt;SPAN class=pln&gt;&lt;BR&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/SPAN&gt;&lt;SPAN class=kwd&gt;&lt;FONT color=#000088&gt;return&lt;/FONT&gt;&lt;/SPAN&gt;&lt;SPAN class=pun&gt;&lt;FONT color=#666600&gt;;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;SPAN class=pln&gt;&lt;BR&gt;&lt;BR&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/SPAN&gt;&lt;SPAN class=typ&gt;&lt;FONT color=#660066&gt;PropertyChanged&lt;/FONT&gt;&lt;/SPAN&gt;&lt;SPAN class=pun&gt;&lt;FONT color=#666600&gt;(&lt;/FONT&gt;&lt;/SPAN&gt;&lt;SPAN class=kwd&gt;&lt;FONT color=#000088&gt;this&lt;/FONT&gt;&lt;/SPAN&gt;&lt;SPAN class=pun&gt;&lt;FONT color=#666600&gt;,&lt;/FONT&gt;&lt;/SPAN&gt;&lt;SPAN class=pln&gt; &lt;/SPAN&gt;&lt;SPAN class=kwd&gt;&lt;FONT color=#000088&gt;new&lt;/FONT&gt;&lt;/SPAN&gt;&lt;SPAN class=pln&gt; &lt;/SPAN&gt;&lt;SPAN class=typ&gt;&lt;FONT color=#660066&gt;PropertyChangedEventArgs&lt;/FONT&gt;&lt;/SPAN&gt;&lt;SPAN class=pun&gt;&lt;FONT color=#666600&gt;(&lt;/FONT&gt;&lt;/SPAN&gt;&lt;SPAN class=pln&gt;propertyName&lt;/SPAN&gt;&lt;SPAN class=pun&gt;&lt;FONT color=#666600&gt;));&lt;/FONT&gt;&lt;/SPAN&gt;&lt;SPAN class=pln&gt;&lt;BR&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/SPAN&gt;&lt;SPAN class=pun&gt;&lt;FONT color=#666600&gt;}&lt;/FONT&gt;&lt;/SPAN&gt;&lt;SPAN class=pln&gt;&lt;BR&gt;&amp;nbsp; &amp;nbsp; &lt;/SPAN&gt;&lt;SPAN class=pun&gt;&lt;FONT color=#666600&gt;}&lt;/FONT&gt;&lt;/SPAN&gt;&lt;BR&gt;&lt;fieldset style=&quot;margin:20px 0px 20px 0px;padding:5px;&quot;&gt;&lt;legend&gt;&lt;span&gt;&lt;strong&gt;크리에이티브 커먼즈 라이센스&lt;/strong&gt;&lt;/span&gt;&lt;/legend&gt;&lt;!--Creative Commons License--&gt;&lt;div style=&quot;float: left; width: 88px; margin-top: 3px;&quot;&gt;&lt;a rel=&quot;license&quot; href=&quot;http://creativecommons.org/licenses/by-nc-nd/2.0/kr/&quot; target=_blank&gt;&lt;img alt=&quot;Creative Commons License&quot; style=&quot;border-width: 0&quot; src=&quot;http://i.creativecommons.org/l/by-nc-nd/2.0/kr/88x31.png&quot;/&gt;&lt;/a&gt;&lt;/div&gt;&lt;div style=&quot;margin-left: 92px; margin-top: 3px; text-align: justify;&quot;&gt;이 저작물은 &lt;a rel=&quot;license&quot; href=&quot;http://creativecommons.org/licenses/by-nc-nd/2.0/kr/&quot; target=_blank&gt;크리에이티브 커먼즈 코리아 저작자표시-비영리-변경금지 2.0 대한민국 라이센스&lt;/a&gt;에 따라 이용하실 수 있습니다.
			&lt;!-- Creative Commons License--&gt;
			&lt;!-- &lt;rdf:RDF xmlns=&quot;http://web.resource.org/cc/&quot; xmlns:dc=&quot;http://purl.org/dc/elements/1.1/&quot; xmlns:rdf=&quot;http://www.w3.org/1999/02/22-rdf-syntax-ns#&quot;&gt;
			&lt;Work rdf:about=&quot;&quot;&gt;
			&lt;license rdf:resource=&quot;http://creativecommons.org/licenses/by-nc-nd/2.0/kr/&quot; /&gt;
			&lt;/Work&gt;
			&lt;License rdf:about=&quot;http://creativecommons.org/licenses/by-nc-nd/&quot;&gt;
			&lt;permits rdf:resource=&quot;http://web.resource.org/cc/Reproduction&quot;/&gt;
			&lt;permits rdf:resource=&quot;http://web.resource.org/cc/Distribution&quot;/&gt;
			&lt;requires rdf:resource=&quot;http://web.resource.org/cc/Notice&quot;/&gt;
			&lt;requires rdf:resource=&quot;http://web.resource.org/cc/Attribution&quot;/&gt;&lt;prohibits rdf:resource=&quot;http://web.resource.org/cc/CommercialUse&quot;/&gt;&lt;/License&gt;&lt;/rdf:RDF&gt; --&gt;&lt;/div&gt;&lt;/fieldset&gt;</description>
			<category>.NET</category>
			<category>.NET</category>
			<category>AOP</category>
			<category>C#</category>
			<category>PostSharp</category>
			<author>(나는산)</author>
			<guid>http://lovehana.com/592</guid>
			<comments>http://lovehana.com/592#entry592comment</comments>
			<pubDate>Tue, 29 Dec 2009 10:25:27 +0900</pubDate>
		</item>
		<item>
			<title>Ubuntu에 Subversion 서버 설치</title>
			<link>http://lovehana.com/591</link>
			<description>&lt;P&gt;To install subversion, open a terminal and run the following command:&lt;/P&gt;
&lt;BLOCKQUOTE&gt;
&lt;P&gt;sudo apt-get install apache2&lt;BR&gt;sudo apt-get install subversion libapache2-svn&lt;/P&gt;&lt;/BLOCKQUOTE&gt;
&lt;P&gt;We’re going to create the subversion repository in /svn, although you should choose a location that has a good amount of space.&lt;/P&gt;
&lt;BLOCKQUOTE&gt;
&lt;P&gt;sudo svnadmin create /svn&lt;BR&gt;sudo chown www-data:www-data /svn -R&lt;/P&gt;&lt;/BLOCKQUOTE&gt;
&lt;P&gt;Next we’ll need to edit the configuration file for the subversion webdav module. You can use a different editor if you’d like.&lt;/P&gt;
&lt;BLOCKQUOTE&gt;
&lt;P&gt;sudo gedit /etc/apache2/mods-enabled/dav_svn.conf&lt;/P&gt;&lt;/BLOCKQUOTE&gt;
&lt;P&gt;The Location element in the configuration file dictates the root directory where subversion will be acessible from, for instance: http://www.server.com/svn&lt;/P&gt;
&lt;BLOCKQUOTE&gt;
&lt;P&gt;&amp;lt;Location /svn&amp;gt; &lt;/P&gt;&lt;/BLOCKQUOTE&gt;
&lt;P&gt;The DAV line needs to be uncommented to enable the dav module&lt;/P&gt;
&lt;BLOCKQUOTE&gt;
&lt;P&gt;# Uncomment this to enable the repository,&lt;BR&gt;DAV svn &lt;/P&gt;&lt;/BLOCKQUOTE&gt;
&lt;P&gt;The SVNPath line should be set to the same place your created the repository with the svnadmin command.&lt;/P&gt;
&lt;BLOCKQUOTE&gt;
&lt;P&gt;# Set this to the path to your repository&lt;BR&gt;SVNPath /svn &lt;/P&gt;&lt;/BLOCKQUOTE&gt;
&lt;P&gt;The next section will let you turn on authentication. This is just basic authentication, so don’t consider it extremely secure. The password file will be located where the AuthUserFile setting sets it to…&amp;nbsp; probably best to leave it at the default.&lt;BR&gt;&lt;/P&gt;
&lt;BLOCKQUOTE&gt;
&lt;P&gt;# Uncomment the following 3 lines to enable Basic Authentication&lt;BR&gt;AuthType Basic&lt;BR&gt;AuthName “Subversion Repository”&lt;BR&gt;AuthUserFile /etc/apache2/dav_svn.passwd &lt;/P&gt;&lt;/BLOCKQUOTE&gt;
&lt;P&gt;To create a user on the repository use, the following command:&lt;BR&gt;&lt;/P&gt;
&lt;BLOCKQUOTE&gt;
&lt;P&gt;sudo htpasswd2 -cm /etc/apache2/dav_svn.passwd &amp;lt;username&amp;gt;&lt;/P&gt;&lt;/BLOCKQUOTE&gt;
&lt;P&gt;Note that you should only use the -c option the FIRST time that you create a user. After that you will only want to use the -m option, which specifies MD5 encryption of the password, but doesn’t recreate the file.&lt;/P&gt;
&lt;P&gt;Example:&lt;/P&gt;
&lt;BLOCKQUOTE&gt;
&lt;P&gt;sudo htpasswd2 -cm /etc/apache2/dav_svn.passwd geek&lt;BR&gt;New password: &lt;BR&gt;Re-type new password: &lt;BR&gt;Adding password for user geek&lt;/P&gt;&lt;/BLOCKQUOTE&gt;
&lt;P&gt;Restart apache by running the following command:&lt;BR&gt;&lt;/P&gt;
&lt;BLOCKQUOTE&gt;
&lt;P&gt;sudo /etc/init.d/apache2 restart&lt;/P&gt;&lt;/BLOCKQUOTE&gt;
&lt;P&gt;Now if you go in your browser to http://www.server.com/svn, you should see that the repository is enabled for anonymous read access, but commit access will require a username. 
&lt;P&gt;&lt;IMG style=&quot;BORDER-BOTTOM: 0px; BORDER-LEFT: 0px; BORDER-TOP: 0px; BORDER-RIGHT: 0px&quot; border=0 src=&quot;http://www.howtogeek.com/wp-content/uploads/2006/12/WindowsLiveWriter/InstallSubversionwithWebAccessonUbuntu_602B/rev0%5B1%5D1.png&quot; width=338 height=102&gt; 
&lt;P&gt;If you want to force all users to authenticate even for read access, add the following line right below the AuthUserFile line from above. Restart apache after changing this line.&lt;BR&gt;&lt;/P&gt;
&lt;BLOCKQUOTE&gt;
&lt;P&gt;Require valid-user&lt;/P&gt;&lt;/BLOCKQUOTE&gt;&lt;fieldset style=&quot;margin:20px 0px 20px 0px;padding:5px;&quot;&gt;&lt;legend&gt;&lt;span&gt;&lt;strong&gt;크리에이티브 커먼즈 라이센스&lt;/strong&gt;&lt;/span&gt;&lt;/legend&gt;&lt;!--Creative Commons License--&gt;&lt;div style=&quot;float: left; width: 88px; margin-top: 3px;&quot;&gt;&lt;a rel=&quot;license&quot; href=&quot;http://creativecommons.org/licenses/by-nc-nd/2.0/kr/&quot; target=_blank&gt;&lt;img alt=&quot;Creative Commons License&quot; style=&quot;border-width: 0&quot; src=&quot;http://i.creativecommons.org/l/by-nc-nd/2.0/kr/88x31.png&quot;/&gt;&lt;/a&gt;&lt;/div&gt;&lt;div style=&quot;margin-left: 92px; margin-top: 3px; text-align: justify;&quot;&gt;이 저작물은 &lt;a rel=&quot;license&quot; href=&quot;http://creativecommons.org/licenses/by-nc-nd/2.0/kr/&quot; target=_blank&gt;크리에이티브 커먼즈 코리아 저작자표시-비영리-변경금지 2.0 대한민국 라이센스&lt;/a&gt;에 따라 이용하실 수 있습니다.
			&lt;!-- Creative Commons License--&gt;
			&lt;!-- &lt;rdf:RDF xmlns=&quot;http://web.resource.org/cc/&quot; xmlns:dc=&quot;http://purl.org/dc/elements/1.1/&quot; xmlns:rdf=&quot;http://www.w3.org/1999/02/22-rdf-syntax-ns#&quot;&gt;
			&lt;Work rdf:about=&quot;&quot;&gt;
			&lt;license rdf:resource=&quot;http://creativecommons.org/licenses/by-nc-nd/2.0/kr/&quot; /&gt;
			&lt;/Work&gt;
			&lt;License rdf:about=&quot;http://creativecommons.org/licenses/by-nc-nd/&quot;&gt;
			&lt;permits rdf:resource=&quot;http://web.resource.org/cc/Reproduction&quot;/&gt;
			&lt;permits rdf:resource=&quot;http://web.resource.org/cc/Distribution&quot;/&gt;
			&lt;requires rdf:resource=&quot;http://web.resource.org/cc/Notice&quot;/&gt;
			&lt;requires rdf:resource=&quot;http://web.resource.org/cc/Attribution&quot;/&gt;&lt;prohibits rdf:resource=&quot;http://web.resource.org/cc/CommercialUse&quot;/&gt;&lt;/License&gt;&lt;/rdf:RDF&gt; --&gt;&lt;/div&gt;&lt;/fieldset&gt;</description>
			<category>Linux</category>
			<author>(나는산)</author>
			<guid>http://lovehana.com/591</guid>
			<comments>http://lovehana.com/591#entry591comment</comments>
			<pubDate>Wed, 02 Dec 2009 21:53:42 +0900</pubDate>
		</item>
		<item>
			<title>C# 4.0 Improved COM Interoperability</title>
			<link>http://lovehana.com/590</link>
			<description>참조 : http://modeeb.wordpress.com/2009/04/08/c-40-whats-next/&lt;br&gt;&lt;br&gt;&lt;span style=&quot;font-weight: bold; text-decoration: underline;&quot;&gt;Improved COM Interoperability&lt;/span&gt;&lt;br&gt;&lt;br&gt;C#에서 COM interop 함수들과 작업을 했을때, 여러분은 다음과 같이 불필요한 파라미터에 참조값으로 Missing.Value를 넘겨줬어야 했다.&lt;br&gt;&lt;br&gt;&lt;p&gt;&lt;font color=&quot;#0000ff&quot;&gt;object&lt;/font&gt; &lt;font color=&quot;#000000&quot;&gt;filename =&lt;/font&gt; &lt;font color=&quot;#800000&quot;&gt;&quot;test.docx&quot;&lt;/font&gt;;     &lt;br&gt;&lt;font color=&quot;#000000&quot;&gt;&lt;font color=&quot;#0000ff&quot;&gt;object&lt;/font&gt; missing = System.Reflection.&lt;/font&gt;&lt;font color=&quot;#008080&quot;&gt;Missing&lt;/font&gt;&lt;font color=&quot;#000000&quot;&gt;.Value; &lt;/font&gt;&lt;/p&gt;
&lt;font color=&quot;#000000&quot;&gt;doc.SaveAs(&lt;/font&gt;&lt;font color=&quot;#0000ff&quot;&gt;ref&lt;/font&gt; &lt;font color=&quot;#000000&quot;&gt;filename,      &lt;br&gt;&lt;/font&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;nbsp; &lt;font color=&quot;#0000ff&quot;&gt;ref&lt;/font&gt; &lt;font color=&quot;#000000&quot;&gt;missing,&lt;/font&gt; &lt;font color=&quot;#0000ff&quot;&gt;ref&lt;/font&gt; &lt;font color=&quot;#000000&quot;&gt;missing,&lt;/font&gt; &lt;font color=&quot;#0000ff&quot;&gt;ref&lt;/font&gt; &lt;font color=&quot;#000000&quot;&gt;missing,&lt;/font&gt;     &lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;nbsp; &lt;font color=&quot;#0000ff&quot;&gt;ref&lt;/font&gt; &lt;font color=&quot;#000000&quot;&gt;missing,&lt;/font&gt; &lt;font color=&quot;#0000ff&quot;&gt;ref&lt;/font&gt; &lt;font color=&quot;#000000&quot;&gt;missing,&lt;/font&gt; &lt;font color=&quot;#0000ff&quot;&gt;ref&lt;/font&gt; &lt;font color=&quot;#000000&quot;&gt;missing,&lt;/font&gt;     &lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;nbsp; &lt;font color=&quot;#0000ff&quot;&gt;ref&lt;/font&gt; &lt;font color=&quot;#000000&quot;&gt;missing,&lt;/font&gt; &lt;font color=&quot;#0000ff&quot;&gt;ref&lt;/font&gt; &lt;font color=&quot;#000000&quot;&gt;missing,&lt;/font&gt; &lt;font color=&quot;#0000ff&quot;&gt;ref&lt;/font&gt; &lt;font color=&quot;#000000&quot;&gt;missing,&lt;/font&gt;     &lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;nbsp; &lt;font color=&quot;#0000ff&quot;&gt;ref&lt;/font&gt; &lt;font color=&quot;#000000&quot;&gt;missing,&lt;/font&gt; &lt;font color=&quot;#0000ff&quot;&gt;ref&lt;/font&gt; &lt;font color=&quot;#000000&quot;&gt;missing,&lt;/font&gt; &lt;font color=&quot;#0000ff&quot;&gt;ref&lt;/font&gt; &lt;font color=&quot;#000000&quot;&gt;missing,&lt;/font&gt;     &lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;nbsp; &lt;font color=&quot;#0000ff&quot;&gt;ref&lt;/font&gt; &lt;font color=&quot;#000000&quot;&gt;missing,&lt;/font&gt; &lt;font color=&quot;#0000ff&quot;&gt;ref&lt;/font&gt; &lt;font color=&quot;#000000&quot;&gt;missing,&lt;/font&gt; &lt;font color=&quot;#0000ff&quot;&gt;ref&lt;/font&gt; &lt;font color=&quot;#000000&quot;&gt;missing);      &lt;/font&gt;&lt;br&gt;&lt;br&gt;인제 C# 4.0에서는 다음과 같이 코딩하면 된다.&lt;br&gt;&lt;br&gt;&lt;font color=&quot;#000000&quot;&gt;doc.SaveAs(filename); &lt;br&gt;&lt;/font&gt;&lt;br&gt;위 코드를 보면 여러분은 ref 생략이 가능하지만, 아직 COM interoperability를 사용하지 않을 경우 ref를 생략하면 안된다. 또, 여러분의 .NET 응용프로그램과 Primary Interop Assembly (PIA)를 포함되어야 했다. C# 4.0에서는 이 작업이 필요없다.&lt;br&gt;&lt;fieldset style=&quot;margin:20px 0px 20px 0px;padding:5px;&quot;&gt;&lt;legend&gt;&lt;span&gt;&lt;strong&gt;크리에이티브 커먼즈 라이센스&lt;/strong&gt;&lt;/span&gt;&lt;/legend&gt;&lt;!--Creative Commons License--&gt;&lt;div style=&quot;float: left; width: 88px; margin-top: 3px;&quot;&gt;&lt;a rel=&quot;license&quot; href=&quot;http://creativecommons.org/licenses/by-nc-nd/2.0/kr/&quot; target=_blank&gt;&lt;img alt=&quot;Creative Commons License&quot; style=&quot;border-width: 0&quot; src=&quot;http://i.creativecommons.org/l/by-nc-nd/2.0/kr/88x31.png&quot;/&gt;&lt;/a&gt;&lt;/div&gt;&lt;div style=&quot;margin-left: 92px; margin-top: 3px; text-align: justify;&quot;&gt;이 저작물은 &lt;a rel=&quot;license&quot; href=&quot;http://creativecommons.org/licenses/by-nc-nd/2.0/kr/&quot; target=_blank&gt;크리에이티브 커먼즈 코리아 저작자표시-비영리-변경금지 2.0 대한민국 라이센스&lt;/a&gt;에 따라 이용하실 수 있습니다.
			&lt;!-- Creative Commons License--&gt;
			&lt;!-- &lt;rdf:RDF xmlns=&quot;http://web.resource.org/cc/&quot; xmlns:dc=&quot;http://purl.org/dc/elements/1.1/&quot; xmlns:rdf=&quot;http://www.w3.org/1999/02/22-rdf-syntax-ns#&quot;&gt;
			&lt;Work rdf:about=&quot;&quot;&gt;
			&lt;license rdf:resource=&quot;http://creativecommons.org/licenses/by-nc-nd/2.0/kr/&quot; /&gt;
			&lt;/Work&gt;
			&lt;License rdf:about=&quot;http://creativecommons.org/licenses/by-nc-nd/&quot;&gt;
			&lt;permits rdf:resource=&quot;http://web.resource.org/cc/Reproduction&quot;/&gt;
			&lt;permits rdf:resource=&quot;http://web.resource.org/cc/Distribution&quot;/&gt;
			&lt;requires rdf:resource=&quot;http://web.resource.org/cc/Notice&quot;/&gt;
			&lt;requires rdf:resource=&quot;http://web.resource.org/cc/Attribution&quot;/&gt;&lt;prohibits rdf:resource=&quot;http://web.resource.org/cc/CommercialUse&quot;/&gt;&lt;/License&gt;&lt;/rdf:RDF&gt; --&gt;&lt;/div&gt;&lt;/fieldset&gt;</description>
			<category>.NET</category>
			<category>C#</category>
			<author>(나는산)</author>
			<guid>http://lovehana.com/590</guid>
			<comments>http://lovehana.com/590#entry590comment</comments>
			<pubDate>Tue, 01 Dec 2009 13:01:02 +0900</pubDate>
		</item>
		<item>
			<title>C# 4.0 Optional and Named Parameters</title>
			<link>http://lovehana.com/589</link>
			<description>참조 : http://modeeb.wordpress.com/2009/04/08/c-40-whats-next/&lt;br&gt;&lt;br&gt;&lt;span style=&quot;font-weight: bold; text-decoration: underline;&quot;&gt;Optional and Named Parameters&lt;/span&gt;&lt;br&gt;&lt;br&gt;C# 4.0의 또 다른 장점은 C나 C++처럼 Optional Paramenter와 Named Parameter를 지원한다는 것이다.&lt;br&gt;&lt;br&gt;이전 C#에서는 이런 기능들이 지원이 되지 않아 함수 이름이 똑같지만 파라미터가 다른 여러개의 함수들을 볼 수 있었을 것이다. C# 4.0에서는 다음과 같이 함수는 선택적 파라미터를 사용하여 리펙토링 될 수 있다.&lt;br&gt;&lt;br&gt;&lt;font color=&quot;#0000ff&quot;&gt;public&lt;/font&gt; &lt;font color=&quot;#008080&quot;&gt;StreamReader&lt;/font&gt; &lt;font color=&quot;#000000&quot;&gt;OpenTextFile(      &lt;br&gt;&lt;/font&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;nbsp; &lt;font color=&quot;#0000ff&quot;&gt;string&lt;/font&gt; &lt;font color=&quot;#000000&quot;&gt;path,      &lt;br&gt;&lt;/font&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;nbsp; &lt;font color=&quot;#008080&quot;&gt;Encoding&lt;/font&gt; &lt;font color=&quot;#000000&quot;&gt;encoding = &lt;/font&gt;&lt;font color=&quot;#0000ff&quot;&gt;null&lt;/font&gt;,     &lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;nbsp; &lt;font color=&quot;#0000ff&quot;&gt;bool &lt;/font&gt;&lt;font color=&quot;#000000&quot;&gt;detectEncoding =&lt;/font&gt; &lt;font color=&quot;#0000ff&quot;&gt;false&lt;/font&gt;,     &lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;nbsp; &lt;font color=&quot;#0000ff&quot;&gt;int&lt;/font&gt;&lt;font color=&quot;#000000&quot;&gt; bufferSize =&lt;/font&gt; &lt;font color=&quot;#800080&quot;&gt;1024&lt;/font&gt;&lt;font color=&quot;#000000&quot;&gt;) { }      &lt;br&gt;&lt;br&gt;&lt;/font&gt;위와 같이 OpenTextFile 함수는 선택적 파라미터 하나 이상의 파라미터를 생략해서 사용할 수 있다.&lt;br&gt;&lt;br&gt;&lt;p&gt;&lt;font color=&quot;#000000&quot;&gt;OpenTextFile(&lt;/font&gt;&lt;font color=&quot;#800000&quot;&gt;&quot;foo.txt&quot;&lt;/font&gt;&lt;font color=&quot;#000000&quot;&gt;,&lt;/font&gt; &lt;font color=&quot;#008080&quot;&gt;Encoding&lt;/font&gt;&lt;font color=&quot;#000000&quot;&gt;.UTF8&lt;/font&gt;&lt;font color=&quot;#000000&quot;&gt;); &lt;br&gt;&lt;/font&gt;&lt;/p&gt;또한 C# 4.0는 Named Parameter를 지원해서 OpenTextFile 함수는 선택적 파라미터를 생략하면서 특정 파마리터를 정의해서 사용할 수 있다.&lt;br&gt;&lt;br&gt;&lt;p&gt;&lt;font color=&quot;#000000&quot;&gt;OpenTextFile(&lt;/font&gt;&lt;font color=&quot;#800000&quot;&gt;&quot;foo.txt&quot;&lt;/font&gt;&lt;font color=&quot;#000000&quot;&gt;,&lt;/font&gt; &lt;font color=&quot;#008080&quot;&gt;Encoding&lt;/font&gt;&lt;font color=&quot;#000000&quot;&gt;.UTF8, bufferSize: &lt;/font&gt;&lt;font color=&quot;#800080&quot;&gt;1024&lt;/font&gt;&lt;font color=&quot;#000000&quot;&gt;); &lt;/font&gt;&lt;/p&gt;Named Parameter는 함수 파라미터 순서에서 항상 마지막에서 사용되어야 하지만 Named Parameter 끼리는 순서가 상관 없다.&lt;br&gt;&lt;fieldset style=&quot;margin:20px 0px 20px 0px;padding:5px;&quot;&gt;&lt;legend&gt;&lt;span&gt;&lt;strong&gt;크리에이티브 커먼즈 라이센스&lt;/strong&gt;&lt;/span&gt;&lt;/legend&gt;&lt;!--Creative Commons License--&gt;&lt;div style=&quot;float: left; width: 88px; margin-top: 3px;&quot;&gt;&lt;a rel=&quot;license&quot; href=&quot;http://creativecommons.org/licenses/by-nc-nd/2.0/kr/&quot; target=_blank&gt;&lt;img alt=&quot;Creative Commons License&quot; style=&quot;border-width: 0&quot; src=&quot;http://i.creativecommons.org/l/by-nc-nd/2.0/kr/88x31.png&quot;/&gt;&lt;/a&gt;&lt;/div&gt;&lt;div style=&quot;margin-left: 92px; margin-top: 3px; text-align: justify;&quot;&gt;이 저작물은 &lt;a rel=&quot;license&quot; href=&quot;http://creativecommons.org/licenses/by-nc-nd/2.0/kr/&quot; target=_blank&gt;크리에이티브 커먼즈 코리아 저작자표시-비영리-변경금지 2.0 대한민국 라이센스&lt;/a&gt;에 따라 이용하실 수 있습니다.
			&lt;!-- Creative Commons License--&gt;
			&lt;!-- &lt;rdf:RDF xmlns=&quot;http://web.resource.org/cc/&quot; xmlns:dc=&quot;http://purl.org/dc/elements/1.1/&quot; xmlns:rdf=&quot;http://www.w3.org/1999/02/22-rdf-syntax-ns#&quot;&gt;
			&lt;Work rdf:about=&quot;&quot;&gt;
			&lt;license rdf:resource=&quot;http://creativecommons.org/licenses/by-nc-nd/2.0/kr/&quot; /&gt;
			&lt;/Work&gt;
			&lt;License rdf:about=&quot;http://creativecommons.org/licenses/by-nc-nd/&quot;&gt;
			&lt;permits rdf:resource=&quot;http://web.resource.org/cc/Reproduction&quot;/&gt;
			&lt;permits rdf:resource=&quot;http://web.resource.org/cc/Distribution&quot;/&gt;
			&lt;requires rdf:resource=&quot;http://web.resource.org/cc/Notice&quot;/&gt;
			&lt;requires rdf:resource=&quot;http://web.resource.org/cc/Attribution&quot;/&gt;&lt;prohibits rdf:resource=&quot;http://web.resource.org/cc/CommercialUse&quot;/&gt;&lt;/License&gt;&lt;/rdf:RDF&gt; --&gt;&lt;/div&gt;&lt;/fieldset&gt;</description>
			<category>.NET</category>
			<category>C#</category>
			<author>(나는산)</author>
			<guid>http://lovehana.com/589</guid>
			<comments>http://lovehana.com/589#entry589comment</comments>
			<pubDate>Tue, 01 Dec 2009 12:46:17 +0900</pubDate>
		</item>
		<item>
			<title>C# 4.0 Dynamically Typed Objects</title>
			<link>http://lovehana.com/588</link>
			<description>참조 : http://modeeb.wordpress.com/2009/04/08/c-40-whats-next/&lt;br&gt;&lt;br&gt;&lt;span style=&quot;font-weight: bold; text-decoration: underline;&quot;&gt;Dynamically Typed Objects&lt;/span&gt;&lt;br&gt;&lt;br&gt;오늘날 C#에서 여러분은 아래 코드와 같이 특정 클래스의 인스턴스를 가져와서 그 인스턴스의 &lt;span style=&quot;font-weight: bold;&quot;&gt;Add&lt;/span&gt;이라는 함수를 호출해서 두 정수의 합을 가져와야 하는 필요하가 있을 수도 있다.&lt;br&gt;&lt;br&gt;&lt;p&gt;&lt;font color=&quot;#008080&quot;&gt;Calculator&lt;/font&gt;&lt;font color=&quot;#000000&quot;&gt; calc = GetCalculator();      &lt;br&gt;&lt;/font&gt;&lt;font color=&quot;#0000ff&quot;&gt;int&lt;/font&gt;&lt;font color=&quot;#000000&quot;&gt; sum = calc.Add(&lt;/font&gt;&lt;font color=&quot;#800080&quot;&gt;10&lt;/font&gt;&lt;font color=&quot;#000000&quot;&gt;,&lt;/font&gt; &lt;font color=&quot;#800080&quot;&gt;20&lt;/font&gt;&lt;font color=&quot;#000000&quot;&gt;);&lt;/font&gt;&lt;/p&gt;&lt;p&gt;위의 코드는 만약은 &lt;span style=&quot;font-weight: bold;&quot;&gt;Calculator&lt;/span&gt; 클래스가 정적 타입이 아니라 COM, Ruby, Python 아니면 심지어 JavaScript으로 쓰져 있다면 더 재미있어 진다. 우리가 &lt;span style=&quot;font-weight: bold;&quot;&gt;Calculator&lt;/span&gt; 클래스가 .NET 객체라고 알고 있지만 정확하게 어떤 타입인지 몰라도 우리는 Reflection을 이용하여 런타임일 때의 속성 타입을 알수 있고 &lt;span style=&quot;font-weight: bold;&quot;&gt;Add&lt;/span&gt; 함수를 동적으로 호출할 수 있다.&lt;/p&gt;&lt;p&gt;&lt;font color=&quot;#0000ff&quot;&gt;object&lt;/font&gt;&lt;font color=&quot;#000000&quot;&gt; calc = GetCalculator();      &lt;br&gt;&lt;/font&gt;&lt;font color=&quot;#008080&quot;&gt;Type&lt;/font&gt;&lt;font color=&quot;#000000&quot;&gt; type = calc.GetType();      &lt;br&gt;&lt;/font&gt;&lt;font color=&quot;#0000ff&quot;&gt;object&lt;/font&gt;&lt;font color=&quot;#000000&quot;&gt; result = type.InvokeMember(&lt;/font&gt;     &lt;br&gt;&lt;font color=&quot;#800000&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;nbsp; &quot;Add&quot;&lt;/font&gt;&lt;font color=&quot;#000000&quot;&gt;,&lt;/font&gt;     &lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;nbsp; &lt;font color=&quot;#008080&quot;&gt;BindingFlags&lt;/font&gt;&lt;font color=&quot;#000000&quot;&gt;.InvokeMethod,&lt;/font&gt;     &lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;nbsp; &lt;font color=&quot;#0000ff&quot;&gt;null&lt;/font&gt;&lt;font color=&quot;#000000&quot;&gt;, &lt;/font&gt;    &lt;br&gt;&lt;font color=&quot;#0000ff&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;nbsp; new object&lt;/font&gt;&lt;font color=&quot;#000000&quot;&gt;[] { &lt;/font&gt;&lt;font color=&quot;#800080&quot;&gt;10&lt;/font&gt;, &lt;font color=&quot;#800080&quot;&gt;20&lt;/font&gt;&lt;font color=&quot;#000000&quot;&gt; });      &lt;br&gt;&lt;/font&gt;&lt;font color=&quot;#0000ff&quot;&gt;int&lt;/font&gt; &lt;font color=&quot;#000000&quot;&gt;sum = &lt;/font&gt;&lt;font color=&quot;#008080&quot;&gt;Convert&lt;/font&gt;&lt;font color=&quot;#000000&quot;&gt;.ToInt32(result);&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font color=&quot;#000000&quot;&gt;C# 4.0에서는 다음 처럼 간단하게 코딩할 수 있다.&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font color=&quot;#0000ff&quot;&gt;dynamic&lt;/font&gt; &lt;font color=&quot;#000000&quot;&gt;calc = GetCalculator();      &lt;br&gt;&lt;/font&gt;&lt;font color=&quot;#0000ff&quot;&gt;int&lt;/font&gt; &lt;font color=&quot;#000000&quot;&gt;sum = calc.Add(&lt;/font&gt;&lt;font color=&quot;#800080&quot;&gt;10&lt;/font&gt;&lt;font color=&quot;#000000&quot;&gt;,&lt;/font&gt; &lt;font color=&quot;#800080&quot;&gt;20&lt;/font&gt;&lt;font color=&quot;#000000&quot;&gt;);&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font color=&quot;#000000&quot;&gt;위 코드 예제에서 우리는 &lt;span style=&quot;font-weight: bold;&quot;&gt;dynamic&lt;/span&gt;이라는 정적 타입을 가지는 calc라는 변수를 선언했다. 다음에 Add 함수를 동적으호 호출하여, 호출되는 결과가 동적으로 정적 타입 정수로 변환한다.&lt;br&gt;&lt;/font&gt;&lt;/p&gt;&lt;fieldset style=&quot;margin:20px 0px 20px 0px;padding:5px;&quot;&gt;&lt;legend&gt;&lt;span&gt;&lt;strong&gt;크리에이티브 커먼즈 라이센스&lt;/strong&gt;&lt;/span&gt;&lt;/legend&gt;&lt;!--Creative Commons License--&gt;&lt;div style=&quot;float: left; width: 88px; margin-top: 3px;&quot;&gt;&lt;a rel=&quot;license&quot; href=&quot;http://creativecommons.org/licenses/by-nc-nd/2.0/kr/&quot; target=_blank&gt;&lt;img alt=&quot;Creative Commons License&quot; style=&quot;border-width: 0&quot; src=&quot;http://i.creativecommons.org/l/by-nc-nd/2.0/kr/88x31.png&quot;/&gt;&lt;/a&gt;&lt;/div&gt;&lt;div style=&quot;margin-left: 92px; margin-top: 3px; text-align: justify;&quot;&gt;이 저작물은 &lt;a rel=&quot;license&quot; href=&quot;http://creativecommons.org/licenses/by-nc-nd/2.0/kr/&quot; target=_blank&gt;크리에이티브 커먼즈 코리아 저작자표시-비영리-변경금지 2.0 대한민국 라이센스&lt;/a&gt;에 따라 이용하실 수 있습니다.
			&lt;!-- Creative Commons License--&gt;
			&lt;!-- &lt;rdf:RDF xmlns=&quot;http://web.resource.org/cc/&quot; xmlns:dc=&quot;http://purl.org/dc/elements/1.1/&quot; xmlns:rdf=&quot;http://www.w3.org/1999/02/22-rdf-syntax-ns#&quot;&gt;
			&lt;Work rdf:about=&quot;&quot;&gt;
			&lt;license rdf:resource=&quot;http://creativecommons.org/licenses/by-nc-nd/2.0/kr/&quot; /&gt;
			&lt;/Work&gt;
			&lt;License rdf:about=&quot;http://creativecommons.org/licenses/by-nc-nd/&quot;&gt;
			&lt;permits rdf:resource=&quot;http://web.resource.org/cc/Reproduction&quot;/&gt;
			&lt;permits rdf:resource=&quot;http://web.resource.org/cc/Distribution&quot;/&gt;
			&lt;requires rdf:resource=&quot;http://web.resource.org/cc/Notice&quot;/&gt;
			&lt;requires rdf:resource=&quot;http://web.resource.org/cc/Attribution&quot;/&gt;&lt;prohibits rdf:resource=&quot;http://web.resource.org/cc/CommercialUse&quot;/&gt;&lt;/License&gt;&lt;/rdf:RDF&gt; --&gt;&lt;/div&gt;&lt;/fieldset&gt;</description>
			<category>.NET</category>
			<category>C#</category>
			<author>(나는산)</author>
			<guid>http://lovehana.com/588</guid>
			<comments>http://lovehana.com/588#entry588comment</comments>
			<pubDate>Tue, 01 Dec 2009 12:33:02 +0900</pubDate>
		</item>
		<item>
			<title>XAML에서 나만의 네임스페이스 사용하기</title>
			<link>http://lovehana.com/587</link>
			<description>&lt;FONT face=Verdana&gt;When we want to declaratively use our custom controls or reference the types we defined in XAML, we should declare the XML namespace to map to the CLR namespace in which the controls and types are defined as the following XAML snippt demonstrates:&lt;BR&gt;&lt;BR&gt;&lt;/FONT&gt;
&lt;DIV style=&quot;BORDER-BOTTOM: rgb(204,204,204) 1px solid; BORDER-LEFT: rgb(204,204,204) 1px solid; PADDING-BOTTOM: 4px; BACKGROUND-COLOR: rgb(238,238,238); PADDING-LEFT: 4px; WIDTH: 98%; PADDING-RIGHT: 5px; FONT-SIZE: 13px; BORDER-TOP: rgb(204,204,204) 1px solid; BORDER-RIGHT: rgb(204,204,204) 1px solid; PADDING-TOP: 4px&quot;&gt;&lt;!--&lt;br&gt;&lt;br&gt;Code highlighting produced by Actipro CodeHighlighter (freeware)&lt;br&gt;http://www.CodeHighlighter.com/&lt;br&gt;&lt;br&gt;--&gt;&lt;SPAN style=&quot;COLOR: rgb(0,0,255)&quot;&gt;&amp;lt;Page&lt;/SPAN&gt;&lt;SPAN style=&quot;COLOR: rgb(255,0,0)&quot;&gt; x:Class&lt;/SPAN&gt;&lt;SPAN style=&quot;COLOR: rgb(0,0,255)&quot;&gt;=&quot;Test.MainWindow&quot;&lt;/SPAN&gt;&lt;SPAN style=&quot;COLOR: rgb(255,0,0)&quot;&gt;&lt;BR&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;nbsp; xmlns&lt;/SPAN&gt;&lt;SPAN style=&quot;COLOR: rgb(0,0,255)&quot;&gt;=&quot;http://schemas.microsoft.com/winfx/2006/xaml/presentation&quot;&lt;/SPAN&gt;&lt;SPAN style=&quot;COLOR: rgb(255,0,0)&quot;&gt;&amp;nbsp;&lt;BR&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;nbsp; xmlns:x&lt;/SPAN&gt;&lt;SPAN style=&quot;COLOR: rgb(0,0,255)&quot;&gt;=&quot;http://schemas.microsoft.com/winfx/2006/xaml&quot;&lt;/SPAN&gt;&lt;SPAN style=&quot;COLOR: rgb(255,0,0)&quot;&gt;&lt;BR&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;nbsp; xmlns:cc&lt;/SPAN&gt;&lt;SPAN style=&quot;COLOR: rgb(0,0,255)&quot;&gt;=&quot;clr-namespace:Sheva.Windows.Controls;assembly=AvalonLib&quot;&lt;/SPAN&gt;&lt;SPAN style=&quot;COLOR: rgb(255,0,0)&quot;&gt;&lt;BR&gt;&lt;/SPAN&gt;&lt;SPAN style=&quot;COLOR: rgb(0,0,255)&quot;&gt;/&amp;gt;&lt;/SPAN&gt;&lt;/DIV&gt;&lt;BR&gt;&amp;nbsp; &amp;nbsp; Recently, I am heavily engaged with writing a resuable WPF control library, and quite often I need to create some pages to test those controls I create, so ever now and then I have to use the cumbersome syntax like above to declare the XML namespace, personally I don&#039;t like the syntax, and I thought Microsoft WPF team should come up with a more elegant way of doing it, and in actuality, they did introduce an alternative to do it since the CTP releases. there is a custom attribute called XmlnsDefinitionAttribute in the System.Windows.Markup namespace which allows you to apply to the assembly which contains the types and controls the XAML code would reference.the built-in WPF assemblies such as WindowsBase.dll, PresentationCore.dll, and PresentationFramework.dll all have this attribute applied, and all have &lt;A href=&quot;xmlns=%22http://schemas.microsoft.com/winfx/2006/xaml/presentation%22&quot;&gt;&lt;U&gt;&lt;FONT color=#0066cc&gt;http://schemas.microsoft.com/winfx/2006/xaml/presentation&lt;/FONT&gt;&lt;/U&gt;&lt;/A&gt; namespace mapped with the CLR namespaces introduced by them. and of cause you can use this attribute in your own project, just open the AssemblyInfo.cs file, and append the following directive:&lt;BR&gt;&lt;BR&gt;
&lt;DIV style=&quot;BORDER-BOTTOM: rgb(204,204,204) 1px solid; BORDER-LEFT: rgb(204,204,204) 1px solid; PADDING-BOTTOM: 4px; BACKGROUND-COLOR: rgb(238,238,238); PADDING-LEFT: 4px; WIDTH: 98%; PADDING-RIGHT: 5px; FONT-SIZE: 13px; BORDER-TOP: rgb(204,204,204) 1px solid; BORDER-RIGHT: rgb(204,204,204) 1px solid; PADDING-TOP: 4px&quot;&gt;&lt;!--&lt;br&gt;&lt;br&gt;Code highlighting produced by Actipro CodeHighlighter (freeware)&lt;br&gt;http://www.CodeHighlighter.com/&lt;br&gt;&lt;br&gt;--&gt;&lt;SPAN style=&quot;COLOR: rgb(0,0,0)&quot;&gt;[assembly: XmlnsDefinition(&lt;/SPAN&gt;&lt;SPAN style=&quot;COLOR: rgb(0,0,0)&quot;&gt;&quot;&lt;/SPAN&gt;&lt;SPAN style=&quot;COLOR: rgb(0,0,0)&quot;&gt;http://schemas.sheva.com/wpf/&lt;/SPAN&gt;&lt;SPAN style=&quot;COLOR: rgb(0,0,0)&quot;&gt;&quot;&lt;/SPAN&gt;&lt;SPAN style=&quot;COLOR: rgb(0,0,0)&quot;&gt;, &lt;/SPAN&gt;&lt;SPAN style=&quot;COLOR: rgb(0,0,0)&quot;&gt;&quot;&lt;/SPAN&gt;&lt;SPAN style=&quot;COLOR: rgb(0,0,0)&quot;&gt;Sheva.Windows.Controls&lt;/SPAN&gt;&lt;SPAN style=&quot;COLOR: rgb(0,0,0)&quot;&gt;&quot;&lt;/SPAN&gt;&lt;SPAN style=&quot;COLOR: rgb(0,0,0)&quot;&gt;)]&lt;/SPAN&gt;&lt;/DIV&gt;&lt;BR&gt;&amp;nbsp; &amp;nbsp; Then you can declare the namespace alias in XAML this way:&lt;BR&gt;&lt;BR&gt;
&lt;DIV style=&quot;BORDER-BOTTOM: rgb(204,204,204) 1px solid; BORDER-LEFT: rgb(204,204,204) 1px solid; PADDING-BOTTOM: 4px; BACKGROUND-COLOR: rgb(238,238,238); PADDING-LEFT: 4px; WIDTH: 98%; PADDING-RIGHT: 5px; FONT-SIZE: 13px; BORDER-TOP: rgb(204,204,204) 1px solid; BORDER-RIGHT: rgb(204,204,204) 1px solid; PADDING-TOP: 4px&quot;&gt;&lt;!--&lt;br&gt;&lt;br&gt;Code highlighting produced by Actipro CodeHighlighter (freeware)&lt;br&gt;http://www.CodeHighlighter.com/&lt;br&gt;&lt;br&gt;--&gt;&lt;FONT face=Verdana&gt;&lt;SPAN style=&quot;COLOR: rgb(0,0,255)&quot;&gt;&amp;lt;&lt;/SPAN&gt;&lt;SPAN style=&quot;COLOR: rgb(128,0,0)&quot;&gt;Page &lt;/SPAN&gt;&lt;SPAN style=&quot;COLOR: rgb(255,0,0)&quot;&gt;x:Class&lt;/SPAN&gt;&lt;SPAN style=&quot;COLOR: rgb(0,0,255)&quot;&gt;=&quot;Test.MainWindow&quot;&lt;/SPAN&gt;&lt;SPAN style=&quot;COLOR: rgb(255,0,0)&quot;&gt;&lt;BR&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;nbsp; xmlns&lt;/SPAN&gt;&lt;SPAN style=&quot;COLOR: rgb(0,0,255)&quot;&gt;=&quot;http://schemas.microsoft.com/winfx/2006/xaml/presentation&quot;&lt;/SPAN&gt;&lt;SPAN style=&quot;COLOR: rgb(255,0,0)&quot;&gt;&amp;nbsp;&lt;BR&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;nbsp; xmlns:x&lt;/SPAN&gt;&lt;SPAN style=&quot;COLOR: rgb(0,0,255)&quot;&gt;=&quot;http://schemas.microsoft.com/winfx/2006/xaml&quot;&lt;/SPAN&gt;&lt;SPAN style=&quot;COLOR: rgb(255,0,0)&quot;&gt;&lt;BR&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;nbsp; xmlns:cc&lt;/SPAN&gt;&lt;SPAN style=&quot;COLOR: rgb(0,0,255)&quot;&gt;=&quot;http://schemas.sheva.com/wpf/&quot;&lt;/SPAN&gt;&lt;SPAN style=&quot;COLOR: rgb(255,0,0)&quot;&gt;&lt;BR&gt;&lt;/SPAN&gt;&lt;SPAN style=&quot;COLOR: rgb(0,0,255)&quot;&gt;/&amp;gt;&lt;/SPAN&gt;&lt;/FONT&gt;&lt;/DIV&gt;&lt;FONT face=Verdana&gt;&amp;nbsp; &amp;nbsp; &lt;BR&gt;&amp;nbsp; &amp;nbsp; Wow, this is a bit like the built-in xmlns declaration indeed, really really cool indeed:)&lt;BR&gt;&lt;/FONT&gt;&lt;fieldset style=&quot;margin:20px 0px 20px 0px;padding:5px;&quot;&gt;&lt;legend&gt;&lt;span&gt;&lt;strong&gt;크리에이티브 커먼즈 라이센스&lt;/strong&gt;&lt;/span&gt;&lt;/legend&gt;&lt;!--Creative Commons License--&gt;&lt;div style=&quot;float: left; width: 88px; margin-top: 3px;&quot;&gt;&lt;a rel=&quot;license&quot; href=&quot;http://creativecommons.org/licenses/by-nc-nd/2.0/kr/&quot; target=_blank&gt;&lt;img alt=&quot;Creative Commons License&quot; style=&quot;border-width: 0&quot; src=&quot;http://i.creativecommons.org/l/by-nc-nd/2.0/kr/88x31.png&quot;/&gt;&lt;/a&gt;&lt;/div&gt;&lt;div style=&quot;margin-left: 92px; margin-top: 3px; text-align: justify;&quot;&gt;이 저작물은 &lt;a rel=&quot;license&quot; href=&quot;http://creativecommons.org/licenses/by-nc-nd/2.0/kr/&quot; target=_blank&gt;크리에이티브 커먼즈 코리아 저작자표시-비영리-변경금지 2.0 대한민국 라이센스&lt;/a&gt;에 따라 이용하실 수 있습니다.
			&lt;!-- Creative Commons License--&gt;
			&lt;!-- &lt;rdf:RDF xmlns=&quot;http://web.resource.org/cc/&quot; xmlns:dc=&quot;http://purl.org/dc/elements/1.1/&quot; xmlns:rdf=&quot;http://www.w3.org/1999/02/22-rdf-syntax-ns#&quot;&gt;
			&lt;Work rdf:about=&quot;&quot;&gt;
			&lt;license rdf:resource=&quot;http://creativecommons.org/licenses/by-nc-nd/2.0/kr/&quot; /&gt;
			&lt;/Work&gt;
			&lt;License rdf:about=&quot;http://creativecommons.org/licenses/by-nc-nd/&quot;&gt;
			&lt;permits rdf:resource=&quot;http://web.resource.org/cc/Reproduction&quot;/&gt;
			&lt;permits rdf:resource=&quot;http://web.resource.org/cc/Distribution&quot;/&gt;
			&lt;requires rdf:resource=&quot;http://web.resource.org/cc/Notice&quot;/&gt;
			&lt;requires rdf:resource=&quot;http://web.resource.org/cc/Attribution&quot;/&gt;&lt;prohibits rdf:resource=&quot;http://web.resource.org/cc/CommercialUse&quot;/&gt;&lt;/License&gt;&lt;/rdf:RDF&gt; --&gt;&lt;/div&gt;&lt;/fieldset&gt;</description>
			<category>WPF</category>
			<category>WPF</category>
			<author>(나는산)</author>
			<guid>http://lovehana.com/587</guid>
			<comments>http://lovehana.com/587#entry587comment</comments>
			<pubDate>Wed, 25 Nov 2009 12:15:58 +0900</pubDate>
		</item>
	</channel>
</rss>
