public class @class
{
private static void Main()
{
int @int = 10;
int @delegate = @int + 30;;
System.Console.WriteLine("Values {0} {1}", @int, @delegate);
}
}
What do you think about using reserved words as identifiers? Let the world know your opinion! :)
Adriano
Sep 10, 2007
Another post in the series RTFM :)
Sep 4, 2007
?? Operator.. What is it good for?
string name = null;
Console.WriteLine("Value: {0}", name ?? "(null)"); // Writes: Value: (null)
name = "Adriano";
Console.WriteLine("Value: {0}", name ?? "(null)"); // Writes: Value: Adriano
Also, it is useful when used in conjunction to nullable value types.
int? i = null;
Console.WriteLine("Value: {0}", i ?? -1); // Writes: Value: (null)
i = 20;
Console.WriteLine("Value: {0}", i ?? -1); // Writes: Value: 20
PS: I've just started to play with C# 3.0 (Visual Studio 2008 beta 2) and it seams to be a very strong language.
PS2: Finally I managed to get SyntaxHighlighter to work with blogger (thanks to this post)
As soon as I got more information I'll post my impressions here :)
See you soon!
Mudanças
- Basicamente entendo que a maioria das pessoas que possam vir a se interessar pelo conteúdo deste blog não teriam problemas para ler conteúdo (pelo menos técnico) em inglês.
- Escrever em inglês me ajudaria a melhorar meus conhecimentos neste idioma.
- Adotar o inglês tornaria este blog mais acessível a outras pessoas que não conhecem o português
Aug 28, 2007
Silencio...
- Object Mocking em .Net (comecei a utilizar o Rhino.Mocks)
- OODB, ou seja, Object Oriented Databases (estou estudando o DB4O)
- Estou escrevendo um artigo sobre um dos novos recursos do Windows Vista (e também do Windows Server 2008), o KTM, ou, gerenciador de transações do Kernel, para uma revista sobre .Net.
- Lendo alguns livros, principalmente um sobre WCF.
- Etc.
Jun 15, 2007
Stream de dados alternativas
Para muitos usuários (e mesmo desenvolvedores) do Windows o conceito de arquivo esta tão sedimentado que muitas vezes melhorias significativas no sistema de arquivos deste sistema operacional (no caso o NTFS) são ignoradas.
Neste post apresento um dos recursos mais desconhecidos, stream alternativas de dados ou ADS (do inglês, Alternate Data Stream).
Para compreendermos este recurso é necessário primeiro definirmos (ou relembrarmos) alguns conceitos:
- Uma stream de dados nada mais é que um conjunto de bytes arranjados de forma seqüencial.
- Um arquivo é composto por uma ou mais streams de dados.
- Streams de dados possuem um nome associado através do qual a mesma é referenciada. A regra básica para formação do nome de streams é: nome-arquivo.ext:nome-stream:tipo-stream
- O nome da stream pode conter qualquer caracter válido para um nome de arquivo.
Como o Windows não possui meios (tanto no Explorer quanto no console) para detectar / mostrar arquivos que possuem ADS, abaixo listei algumas ferramentas úteis para tal finalidade:
- http://www.heysoft.de/Frames/f_sw_la_en.htm
- http://www.merijn.org/programs.php#adsspy
- http://www.gorvin.net/en/download.shtml
Usando ADSs
A forma mais simples para demonstrarmos este conceito é através do console do Windows. Abra o console (cmd.exe) e digite:
echo teste de streams > teste.txt:dados
Simples assim! O comando acima cria uma stream chamada dados com o conteúdo teste de streams.
Agora você pode conferir que o arquivo teste.txt foi criado mas o comando dir reporta o mesmo com 0 (zero) bytes.
Finalmente, para visualisar o conteúdo da stream digite
more < teste.txt:dados
Abaixo apresento um pequeno programa de exemplo para criar ADSs (note que o mesmo não possui nenhum tratamento especial, ou seja, a forma de acessar data streams alternativas é idêntica à utilizada para acessar a data stream default).
#include "stdio.h"#include "Windows.h" void main(int argc, char *argv[])
{HANDLE handle;
if (argc < 3) { printf("Nome da stream (formato: arquivo.ext:stream) ou dados nao especificados.\r\nUso: ads.exe nome-stream dados"); return;}
else { printf("\r\nGravando dados em %s", argv[1]);}
handle = CreateFile(argv[1],
GENERIC_WRITE,
0,
NULL,
OPEN_ALWAYS,
0, 0);
if (handle != INVALID_HANDLE_VALUE) {DWORD numberOfBytesWritten;
int n = WriteFile( handle, argv[2],
strlen(argv[2]),
&numberOfBytesWritten,
NULL);
printf("\r\n%ld bytes gravados", numberOfBytesWritten);CloseHandle(handle);
}
else { printf("Não foi possivel criar a stream de dados.");}
}
experimente executar o programa com alguns parâmetros como por exemplo:
ads teste.txt:dados "Teste de streams"
É isso ai.
Até a próxima.