09/24/2009 23:10:00
By Felipe Pessoto
Considerando o seguinte código, qual será o resultado?
class Program
{
static void Main()
{
Derived c = new Derived();
c.Metodo(1);
}
}
public class Base
{
public void Metodo(int a)
{
Console.WriteLine("Int32 / " + a.GetType());
}
}
public class Derived:Base
{
public void Metodo(object a)
{
Console.WriteLine("Object / " + a.GetType());
}
}
08/26/2009 08:39:00
By Felipe Pessoto
Uma boa novidade pra quem trabalha com Web, no ASP.NET 4.0 o web.config segue o caminho inverso da versão 3.5 e reduz de tamanho, na verdade quase reduzido a zero.
Na versão 3.0/3.5 ele cresceu bastante pois usavam a mesma CLR e machine.config do 2.0, então os recursos novos tinham que ser registrados no web.config.
Agora com a versão 4.0, que vai ter sua própria machine.config, todas essas extensões, inclusive as do 4.0, serão registradas no próprio machine.config, reduzindo o web.config a isto:
Uma linha pra definir se esá rodando em debug e a versão do framework usada, e outra pra definir se é pra usar o modo integrado com o IIS7.
08/14/2009 11:24:00
By Felipe Pessoto
As seguintes classes geram o mesmo resultado? Se não, por quê?
public class A
{
public static string X = "A";
}
public class A
{
public static string X;
static A()
{
X = "A";
}
}
Teoricamente deveriam ser iguais, mas a segunda classe é equivalente à:
public class A
{
public static string X = "A";
static A()
{
}
}
A diferença está existência ou não do construtor. Quando não há construtor a classe é marcada como beforefieldinit, fazendo com que o type initializer seja chamado antes mesmo de qualquer referência à algum membro da classe.
Podemos perceber isso com o seguinte código:
class Program
{
static void Main(string[] args)
{
Console.WriteLine("Iniciando");
A.Escrever("Escrever");
Console.WriteLine("Depois de escrever");
string y = A.X;
Console.WriteLine("Depois de acessar o campo X");
Console.ReadKey();
}
}
public class A
{
public static string X = Escrever("X (Type Initializer)");
public static string Escrever(string s)
{
Console.WriteLine(s);
return s;
}
}
Antes de qualquer coisa, o tipo já é inicializado. Mas se você criar um construtor, mesmo que vazio, a ordem das chamadas vai mudar.
O Type Initializer só é executado antes da primeira referência ao tipo. No caso antes do A.Escrever("Escrever").
Curioso, e pode gerar um comportamento inesperado.
08/12/2009 09:05:00
By Felipe Pessoto
Foi liberado o primeiro preview públicos das extensões para ASP.NET MVC do Telerik. É um framework leve para desenvolver os componentes visuais que conta com Accordion, DataPicker, ProgressBar, Slider, Message Box, e Tab.
A principal novidade é que eles disponibilizaram o código fonte sob a licença MS-PL, é o primeiro projeto Open Source do Telerik. Porém só será grátis durante o tempo de desenvolvimento da plataforma comercial que eles estão desenvolvendo.
Os componentes suporta várias View Engines, como NHaml e Spark e são baseados em jQuery.
Para mais informações acesse a página Telerik Extensions for ASP.NET MVC
07/31/2009 14:50:00
By Felipe Pessoto
Por acaso descobri o livro Domain-Driver Design em portugues em pré-venda no Submarino. O que achei mais interessante foi o preço, 75 reais, sendo que a versão em inglês que geralmente é mais barata custa 150 reais, até mesmo no Amazon, está 50 dólares.
No site da editora Alta Books, já está a venda, por 85. Vou comprar já. Você também pode fazer o download de um capítulo de amostra.
UPDATE: Meu livro chegou, o lançamento foi ontem e já está disponível no submarino pra entrega imediata.