terça-feira, 15 de junho de 2010

Method extension MSDN

Aqui fica um exemplo que achei interessante sobre extensão de metodos em .net

namespace Extensions
{
using System;
using ExtensionMethodsDemo1;

// Define extension methods for any type that implements IMyInterface.
public static class Extension
{
public static void MethodA(this IMyInterface myInterface, int i)
{
Console.WriteLine("Extension.MethodA(this IMyInterface myInterface, int i)");
}

public static void MethodA(this IMyInterface myInterface, string s)
{
Console.WriteLine("Extension.MethodA(this IMyInterface myInterface, string s)");
}

// This method is never called, because the three classes implement MethodB.
public static void MethodB(this IMyInterface myInterface)
{
Console.WriteLine("Extension.MethodB(this IMyInterface myInterface)");
}
}
}
namespace ExtensionMethodsDemo1
{
using System;
using Extensions;

public interface IMyInterface
{
void MethodB();
}

class A : IMyInterface
{
public void MethodB(){Console.WriteLine("A.MethodB()");}
}

class B : IMyInterface
{
public void MethodB() { Console.WriteLine("B.MethodB()"); }
public void MethodA(int i) { Console.WriteLine("B.MethodA(int i)"); }
}

class C : IMyInterface
{
public void MethodB() { Console.WriteLine("C.MethodB()"); }
public void MethodA(object obj) { Console.WriteLine("C.MethodA(object obj)"); }
}

class ExtMethodDemo
{
static void Main(string[] args)
{
A a = new A();
B b = new B();
C c = new C();
TestMethodBinding(a,b,c);
}

static void TestMethodBinding(A a, B b, C c)
{
// A has no methods, so each call resolves to
// the extension methods whose signatures match.
a.MethodA(1); // Extension.MethodA(object, int)
a.MethodA("hello"); // Extension.MethodA(object, string)
a.MethodB(); // A.MethodB()

// B itself has a method with this signature.
b.MethodA(1); // B.MethodA(int)
b.MethodB(); // B.MethodB()

// B has no matching method, but Extension does.
b.MethodA("hello"); // Extension.MethodA(object, string)

// In each case C has a matching instance method.
c.MethodA(1); // C.MethodA(object)
c.MethodA("hello"); // C.MethodA(object)
c.MethodB(); // C.MethodB()
}
}
}
/* Output:
Extension.MethodA(this IMyInterface myInterface, int i)
Extension.MethodA(this IMyInterface myInterface, string s)
A.MethodB()
B.MethodA(int i)
B.MethodB()
Extension.MethodA(this IMyInterface myInterface, string s)
C.MethodA(object obj)
C.MethodA(object obj)
C.MethodB()
*/

segunda-feira, 14 de junho de 2010

Collection generic

Um exemplo de como utilizar uma colecção generica, no meu ponto de vista é melhor que os arrays, pq nos arrays muitas vezes, se não for dinamica, temos que especificar um tamanho para o contentor, mas pode ocorrer que não sabemos o tamanho que poderá ser introduzido no contentor. Por isso introduzimos numa lista, e podemos usar a propriedade Count para saber quantos elementos estão a ser alojados nesta colecção.

List myInts = new List();

myInts.Add(1);
myInts.Add(2);
myInts.Add(3);

foreach(Int32 i in myInts)
{
Console.WriteLine("MyInts: {0}", i);
}

Windows 7 God's mode

Para os curiosos e para quem gosta de "brincar" um pouco com estas coisas, aqui vai uma sugestão. No desktop criem uma pasta com o nome

GodMode.{ED7BA470-8E54-465E-825C-99712043E01C}

Está pasta irá conter vários aspectos de configuração do windows 7.
Explorem pode ser engraçado...