Академический Документы
Профессиональный Документы
Культура Документы
@miguelpedroso
(C Sharp)
@miguelpedroso
Assembler
i386 ARM
6502
Z80
Z80 bin
Compilador de C
Assembler
Quando compilamos um programa escrito em C, ele s pode funcionar na plataforma para o qual foi compilado.
E em C#?
Compilador de C#
CLR
Programa em C#
Cdigo CIL
Cdigo nativo
Bytecode
Quando compilamos o programa em C#, gerado cdigo CIL (Common Intermediate Language) Esse cdigo intermdio executado com ajuda de uma Common Language Runtime
x86
Hello, World
Tipos de dados byte, sbyte, short, ushort, int, uint, long, ulong, float, double, decimal, bool, object char, string
string str1 = Hello; string str2 = World ; string str3 = str1 + + str3 + 0.ToString() Console.WriteLine(str3); Output: Hello World 0
Em C# as variveis locais tm de ser inicializadas antes de serem utilizadas. int i = new int(); ou
int i = 0;
decimal vs double quando queremos tratar de valores monetrios, devemos usar sempre o tipo decimal!
decimal vs double
static void Main(string[] args) { decimal cash1 = 99999999999999.99M; decimal result = cash1 - 1M;
Why? :)
Operadores =, +, -, *, /, % ==, !=, <, <=, >= ! (Negao Lgica), ~ (Complemento Bitwise)
Operadores ++, --, +=, -=, *=, /= <<, >>, |, &, ^ &&, ||
Operadores && vs & && um AND condicional (true && false) retorna false (1 & 3) retorna 1
Condies
if (condition) action(); else if (condition2) action2(); else action3();
Ciclos
while (condition) { instructions; } do { instructions; } while (condition) for (decl, condition, action) { instructions; }
Ciclos Infinitos
while (true);
for ( ; ; );
Ciclos foreach
string name = "Miguel Ferreira de S Pedroso"; string []arr = name.Split(" ".ToCharArray()); foreach (string str in arr) System.Windows.Forms.MessageBox.Show(str.ToUpper());
...
Excepes
try { int a = 0; int b = 2 / a; } catch (Exception err) { System.Windows.Forms.MessageBox.Show(err.Message); } finally { // Do something }
StandartMember
PremiumMember
StandartMember
PremiumMember
public abstract class Member { protected string nick; protected int age; protected bool active;
}
public class Member { protected string nick; protected int age; protected bool active;
Member membro = new PremiumMember(); membro.nick = Miguel Pedroso; membro.age = 20; membro.active = true; membro.IncreaseScore();
Podemos usar uma classe com o seu prprio tipo, com o tipo de uma superclasse, ou com o tipo da interface que implementa.
UInt32
Member
String
StandartMember
PremiumMember
apenas acessvel na prpria classe; tambm acessvel nas suas sub-classes; acessvel por qualquer outra classe; acessvel no mesmo assembly; acessvel no mesmo assembly ou nas suas sub-classes.
sealed abstract
static
nenhuma outra classe pode herdar desta; indica que esta classe deve servir de base para outras sub-classes e no pode ser instanciada; declara uma classe como sendo esttica.
Interfaces
public interface IExample { int DoSomething(); } public class Class1 : IExample { public int DoSomething() { // Do something return 0; } }
Um interface pode ser considerada uma lista de coisas que um objecto pode fazer. Numa interface podem ser colocados os prottipos das funes e variveis a serem implementados por uma dada classe.
Interfaces
public interface IExample { int DoSomething(); } public class Class1 { public int DoSomething() { // Do something return 0; } } public class Class2 : Class1, IExample { public int DoSomething() { // Do something return 0; } }
enums
enum Days {Sat, Sun, Mon, Tue, Wed, Thu, Fri}; Days day = Days.Sat;
Mtodos
private int makeColor (int r, int g, int b) { // Do Stuff }
private int makeColor (int r, int g, int b, int a) { // Do Stuff }
Vrios mtodos podem ter o mesmo nome, desde que recebam argumentos diferentes. Os mtodos podem ter argumentos opcionais.
Em C# podemos passar argumentos por referncia, e no apenas por valor. Para isso usamos a palavra reservada ref ou out. A palavra ref obriga a que varivel cuja referncia passada, j tenha sido inicializada.
namespaces
using System.Text; using System.Windows.Forms;
Em C# temos namespaces, que permitem organizar o cdigo e ter vrios tipos com o mesmo nome. Um namespace pode conter classes, intefaces, enums e structs.
At agora vimos o bsico Mas onde est o verdadeiro poder do C# e da .NET Framework?
Ok, mas agora como que uso a .NET Framework para fazer coisas?
Exemplo Construir um programa de que converta uma imagem que est no clipboard para preto e branco.
Numa bitmap de 24bits, cada pixel tem 3 componentes na sua cor, Red, Green e Blue.
Para converter-mos para Black & White, calculamos a mdia das trs componentes.
Mas como trabalhamos com imagens em C#, precisamos de fazer download de bibliotecas?
No! Basta usar o System.Drawing!
for (int i = 0; i < bp.Height; i++) for (int j = 0; j < bp.Width; j++) { color = bp.GetPixel(j, i); average = (color.R + color.G + color.B) / 3; bp.SetPixel(j, i, Color.FromArgb(average, average, average)); } Clipboard.SetImage((Image)bp);
using (WebClient client = new WebClient()) { string html = client.DownloadString("http://hackerschool.ist.utl.pt/"); Regex regex = new Regex("http://([\\w+?\\.\\w+])+([a-zA-Z09\\~\\!\\@\\#\\$\\%\\^\\&\\*\\(\\)_\\-\\=\\+\\\\\\/\\?\\.\\:\\;\\'\\,]*)?", RegexOptions.IgnoreCase); MatchCollection matches = regex.Matches(html); foreach (Match match in matches) MessageBox.Show(match.Value.ToString()); }
Windows
mas no s!
Visual Studio A verso Express gratuita, enquanto que a verso Ultimate paga.
Visual Studio O IST tem uma parceria com a Microsoft e fornece a verso Ultimate gratuita para alunos de alguns cursos!
Emulador de NES
Desenvolvido em C#
Jogo de Sokoban
Website: http://miguelpedroso.com
Email: miguelfsp@gmail.com contact@miguelpedroso.com
HS:
http://hackerschool.ist.utl.pt
Obrigado!
@miguelpedroso
Desafio Trocar os valores de duas variaveis tipo int, sem recorrer a uma terceira varivel temporria... E sem usar XORs! Ambos os valores iniciais s podem valer de 0 a 1000.
int a = 3; int b = 4; int temp; Como fazer a troca sem recorrer a variveis temporrias ou a XORS?
int a = 3; int b = 4; MessageBox.Show("a=" + a + "\nb=" + b); b |= (a << 16); a = b & 0xFFFF; b >>= 16; MessageBox.Show("a=" + a + "\nb=" + b);
1 7
A 0000 0001 B 0000 0111 A 0000 0001 B 0001 0111 A 0000 0111 B 0001 0111 b |= (a << 4);
a = b & 0x000F;
7 1
b >>= 4;