Aeh pessoal. Faz tempo que nao posto nada no blog, mas estou sempre dando uma passada aqui para responder os comentarios e perguntas.O post de hoje e curtinho, mas traz uma dica muito interessante que recebi outro dia. E o portal Academic Earth. Trata-se de um portal com cursos, aulas e palestras de professores de algumas das melhores universidades do mundo. E de graca, e nao necessita cadastro. Aproveite.Abracos. Para obter o caminho de pastas do sistema, bastautilizar o metodo GetFolderPathda classe System.Environment. Este metodo recebe como parametro um valor da enum SpecialFolder.Por exemplo, para descobrir o caminho da pasta Meus Documentos, faca oseguinte:Console.WriteLine(Environment.GetFolderPath(Environment.SpecialFolder.Personal));Com este recurso voce podera retornar o caminho dediversas pastas, como pasta de musicas, de videos, area de trabalho, historicodo browser e muitos outros. Confira todos os valores da enum SpecialFolder noMSDN.Abracos Ja tem algum tempo que nao escrevo um novo artigo. Realmente ando um tanto ocupado ultimamente, mas mesmo assim, volta e meia dou uma espiada no movimento aqui no blog, e fico atendo a participacao dos leitores. Pretendo retomar meu ritmo de publicacoes pouco a pouco. Hoje falaremos de Interfaces. Uma interface lembra uma classe, porem contem apenas assinaturas de metodos, propriedades, eventos ou indexadores, que devem ser implementados em uma classe. A classe ou estrutura que implementa uma interface deve implementar os membros especificados nesta interface. No exemplo a seguir, a classe ClasseImplementada implementa a interface IExemploInterface e por isto precisa ter um metodo void, chamado MetodoExemplo, que nao receba parametros. interface IExemploInterface { void MetodoExemplo(); } class ClasseImplementada : IExemploInterface { void ISampleInterface. MetodoExemplo () { } static void Main() { IExemploInterface obj = new ClasseImplementada (); obj. MetodoExemplo (); } }Uma interface pode ser um membro de um namespace ou uma classe e pode conter assinaturas de metodos, propriedade, indexadores ou eventos. A interface pode herdar de uma ou mais interfaces, como podemos ver no exemplo abaixo. interface IControle { void Paint(); } interface IAparencia { void Paint(); } public class ClasseExemplo : IControle, IAparencia { void IControle.Paint() { System.Console.WriteLine("IControle.Paint"); } void IAparencia.Paint() { System.Console.WriteLine("IAparencia.Paint"); } }Como disse a pouco, uma classe que implementa uma interface, deve implementar seus membros. No exemplo anterior, a classe ClasseExemplo implementa IControle e IAparencia, e seus metodos. Repare que as duas interfaces implementadas em ClasseExemplo possuem um metodo chamado Paint, ambos com a mesma assinatura. Assim, para diferenciar os metodos implementados usa-se o que e chamado de implementacao explicita de interface, onde explicitamos qual metodo, de qual interface esta sendo implementado, veja: void IControle.Paint() { System.Console.WriteLine("IControle.Paint"); } void IAparencia.Paint() { System.Console.WriteLine("IAparencia.Paint"); }Porem, e importante ressaltar que os metodos implementados na classe nao serao expostos nas instancias da classe ClasseExemplo, e sim nas instancias das interfaces. Desta forma, para chamar estes metodos, e necessario declarar uma instancia da classe, e fazer um cast (converter) do objeto para o tipo da interface, assim:ClasseExemplo obj = new ClasseExemplo();//obj.Paint(); // Erro de compilacao.IControle c = (IControle)obj;c.Paint(); // Chamada de IControle.Paint em ClasseExemplo.IAparencia s = (IAparencia)obj;s.Paint(); // Chamada de IAparencia.Paint em ClasseExemplo.Fonte: http://msdn.microsoft.com/pt-br/library/ms173157.aspx e http://msdn.microsoft.com/pt-br/library/87d83y5b.aspx#Y114. Todos os exemplos foram extraidos ou baseados na