<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>xlab &#187; extension methods</title>
	<atom:link href="http://xlab.pl/tag/extension-methods/feed/" rel="self" type="application/rss+xml" />
	<link>http://xlab.pl</link>
	<description>XSolve laboratory - dzielimy się tym co wiemy...</description>
	<lastBuildDate>Mon, 09 Jan 2012 15:29:06 +0000</lastBuildDate>
	<language>pl</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.1</generator>
		<item>
		<title>Automatyczne nazywanie loggerów log4net, sposób drugi</title>
		<link>http://xlab.pl/automatyczne-nazywanie-logerow-log4net-sposob-drugi/</link>
		<comments>http://xlab.pl/automatyczne-nazywanie-logerow-log4net-sposob-drugi/#comments</comments>
		<pubDate>Wed, 05 Aug 2009 20:33:33 +0000</pubDate>
		<dc:creator>Mateusz Kubiczek</dc:creator>
				<category><![CDATA[Programowanie .NET]]></category>
		<category><![CDATA[.net]]></category>
		<category><![CDATA[extension methods]]></category>
		<category><![CDATA[log4net]]></category>

		<guid isPermaLink="false">http://www.xlab.pl/?p=324</guid>
		<description><![CDATA[Gwiazdorrr w komentarzu do poprzedniej notki o log4net przedstawił inny, niewątpliwie sprytny sposób automatyzacji pobierania nazwanego loggera za pomocą extension methods (metod rozszerzających): namespace Logging { public static class LogExtensions { public static ILog GetLog(this Object obj) { return LogManager.GetLogger(obj.GetType()); } } } public void TestLoggerName() { BasicConfigurator.Configure(); ILog log = GetLog(); Assert.That(log.Logger.Name, Is.EqualTo(”Test.LoggingTests”)); } [...]]]></description>
			<content:encoded><![CDATA[<p>Gwiazdorrr w komentarzu do <a href="http://www.xlab.pl/2009/08/automatyczne-nazywanie-logerow-log4net/">poprzedniej notki o log4net</a> przedstawił inny, niewątpliwie sprytny sposób automatyzacji pobierania nazwanego loggera za pomocą extension methods (metod rozszerzających):</p>
<pre name="code" class="c-sharp">
namespace Logging
{
    public static class LogExtensions
    {
        public static ILog GetLog(this Object obj)
        {
            return LogManager.GetLogger(obj.GetType());
        }
    }
}

public void TestLoggerName()
{
    BasicConfigurator.Configure();
    ILog log = GetLog();
    Assert.That(log.Logger.Name, Is.EqualTo(”Test.LoggingTests”));
}</pre>
<p>Jedyny problem z tym kodem to ta linijka, która się nie kompiluje:</p>
<pre name="code" class="c-sharp">
ILog log = GetLog();</pre>
<pre>
Error 1 The name 'Extension' does not exist in the current context
C:\VS2008\TestLogging\TestLogging\TestClass.cs</pre>
<p>Niemniej jednak, dodanie słowa kluczowego &#8222;this&#8221; wystarcza, żeby kod się skompilował.<br />
Ciekawe, prawda? Co ciekawsze, prawdopobnie przez to ubzdurałem sobie, że nie można wywoływać metod rozszerzających w kontekście klasy, którą rozszerzają. ;-) Oh well, tutaj poprawiony kod, dzięki gwiazdorrr! To tylko jeden z wielu świetnych sposobów na wykorzystanie tego elementu języka C#.<br />
Bardzo polecam <a href="http://stackoverflow.com/questions/271398/post-your-extension-goodies-for-c-net-codeplex-com-extensionoverflow">wątek na StackOverflow zawierający dziesiątki świetnych extension methods</a>. W przyszłości spróbuję skrobnąć więcej o metodach rozszerzających, których często używam.</p>
<pre name="code" class="c-sharp">
namespace Logging
{
    public static class LogExtensions
    {
        public static ILog GetLog(this Object obj)
        {
            return LogManager.GetLogger(obj.GetType());
        }
    }
}</pre>
<pre name="code" class="c-sharp">
public void TestLoggerName()
{
    BasicConfigurator.Configure();
    ILog log = this.GetLog();
    Assert.That(log.Logger.Name, Is.EqualTo(”Test.LoggingTests”));
}</pre>
]]></content:encoded>
			<wfw:commentRss>http://xlab.pl/automatyczne-nazywanie-logerow-log4net-sposob-drugi/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

