Introdução ao C#

513 views

Published on

Introdução ao C#

Published in: Education
0 Comments
2 Likes
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total views
513
On SlideShare
0
From Embeds
0
Number of Embeds
4
Actions
Shares
0
Downloads
0
Comments
0
Likes
2
Embeds 0
No embeds

No notes for slide

Introdução ao C#

  1. 1. C# @miguelpedroso
  2. 2. (C Sharp) @miguelpedroso
  3. 3. C# é uma linguagem deprogramação moderna e orientada por objectos. mas… porquê usar C#?
  4. 4. Assembler i386 i386 bin ARM ARM bin 6502 6502 bin Z80 Z80 bin Código assembly binário para correrespecífico de um CPU num tipo de CPUs.
  5. 5. Compilador Assembler de C i386 i386 binPrograma ARM ARM bin em C … … bin Código assembly binário para correr específico de um CPU num tipo de CPUs.
  6. 6. Quando compilamos um programaescrito em C, ele só pode funcionar na plataforma para o qual foi compilado. E em C#?
  7. 7. Compilador CLR de C#Programa Código Código em C# CIL nativo Bytecode
  8. 8. Quando compilamos o programa em C#, é gerado código CIL (Common Intermediate Language)Esse código intermédio é executado com ajuda de uma Common Language Runtime
  9. 9. x86 CILadd eax, edx ldloc.0 ldloc.1 addPIC16F628a stloc.0addwf 20h, f
  10. 10. Desta forma, um programa escrito em C#, depois de compilado, é platform-independent
  11. 11. Hello, World
  12. 12. public class HelloW{ public static void Main() { System.Console.WriteLine("Hello, World!"); }}
  13. 13. Tipos de dados byte, sbyte, short, ushort,int, uint, long, ulong, float, double, decimal, bool, object char, string
  14. 14. string str1 = “Hello”;string str2 = “World ”;string str3 = str1 + “ “ + str3 + 0.ToString()Console.WriteLine(str3);Output: Hello World 0
  15. 15. Em C# as variáveis locais têm de serinicializadas antes de serem utilizadas. int i = new int(); ou int i = 0;
  16. 16. decimal vs doublequando queremos tratar de valoresmonetários, devemos usar sempre o tipo decimal!
  17. 17. decimal vs doublestatic void Main(string[] args){ decimal cash1 = 99999999999999.99M; decimal result = cash1 - 1M; double cash2 = 99999999999999.99D; double result2 = cash2 - 1.0D; Console.WriteLine("Decimal: " + result.ToString() + "n Double: " + result2.ToString()); Console.ReadLine();} Output: Decimal: 99999999999998,99 Double: 99999999999999 Why? :)
  18. 18. Operadores =, +, -, *, /, % ==, !=, <, <=, >= ! (Negação Lógica),~ (Complemento Bitwise)
  19. 19. Operadores++, --, +=, -=, *=, /= <<, >>, |, &, ^ &&, ||
  20. 20. Operadores && vs & && é um AND condicional(true && false) retorna false (1 & 3) retorna 1
  21. 21. Operador Ternárioint foo = (condition) ? 4 : 3;
  22. 22. Condiçõesif (condition) action();else if (condition2) action2();else action3();
  23. 23. Cicloswhile (condition) for (decl; condition; action){ { instructions; instructions;} } do { instructions; } while (condition)
  24. 24. Ciclos Infinitos while (true); for ( ; ; );
  25. 25. Ciclos foreachstring name = "Miguel Ferreira de Sá Pedroso";string []arr = name.Split(" ".ToCharArray());foreach (string str in arr) System.Windows.Forms.MessageBox.Show(str.ToUpper()); ...
  26. 26. Excepçõestry{ int a = 0; int b = 2 / a;}catch (Exception err){ System.Windows.Forms.MessageBox.Show(err.Message);}finally{ // Do something}
  27. 27. Orientação por Objectos MemberStandartMember PremiumMember
  28. 28. Orientação por Objectos Member Os StandartMembers e os PremiumMembers partilham certos atributos e métodos em comum… Mas também têmStandartMember PremiumMember diferentes tipos de comportamento!
  29. 29. Orientação por ObjectosCom programação orientada porobjectos, podemos usar classes para reaproveitar código.Cada objecto individual, chama-se uma instância.
  30. 30. Orientação por Objectos public class PremiumMember : Member { int premiumScore;public abstract class Member{ public void IncreaseScore() protected string nick; { protected int age; if (this.active) this.premiumScore++; protected bool active; else} throw new Exception("Increasing score of inactive member!"); } }
  31. 31. Orientação por Objectos Member abe = new StandartMember()public class Member abe.nick = “Abraham Lincoln”;{ protected string nick; Member membro = new PremiumMember(); protected int age; membro.nick = “Miguel Pedroso”; membro.age = 20; protected bool active; membro.active = true;} membro.IncreaseScore();
  32. 32. Orientação por Objectos (Polimorfismo)Member abe = new StandartMember()abe.nick = “Abraham Lincoln”;PremiumMember membro = new PremiumMember();StandartMember lincoln = (StandartMember)abe; Podemos usar uma classe com o seupróprio tipo, com o tipo de uma super-classe, ou com o tipo da interface que implementa.
  33. 33. Orientação por Objectos objectUInt32 Member String StandartMember PremiumMember
  34. 34. Orientação por Objectos{access modifier} class Member{ {access modifier} string nick;}
  35. 35. Orientação por Objectosprivate apenas acessível na própria classe;protected também acessível nas suas sub-classes;public acessível por qualquer outra classe;internal acessível no mesmo assembly;protected internal acessível no mesmo assembly ou nas suas sub-classes.
  36. 36. Orientação por Objectos{access modifier} {modifier} class Member{ {access modifier} string nick;}
  37. 37. Orientação por Objectossealed nenhuma outra classe pode herdar desta;abstract indica que esta classe deve servir de base para outras sub-classes e não pode ser instanciada;static declara uma classe como sendo estática.
  38. 38. Controlar acesso a atributospublic class MyClass public class MyClass{ { private int _age; public int Age { public int Age get; { private set; get{ return _age; } } set{ _age = value; } } }}
  39. 39. Orientação por Objectos (classes estáticas)public static class MPMath{ public static int Factorial(int n) int result = MPMath.Factorial(5); { System.Console.WriteLine(result); if (n == 0) return 1; else return n * Factorial(n - 1); }}
  40. 40. Interfacespublic interface IExample Uma interface pode ser{ int DoSomething(); considerada uma lista de} “coisas” que um objecto pode fazer.public class Class1 : IExample{ public int DoSomething() Numa interface podem ser { colocados os protótipos das // Do something return 0; funções e variáveis a serem } implementados por uma} dada classe.
  41. 41. Interfacespublic interface IExample public class Class2 : Class1, IExample{ { int DoSomething(); public int DoSomething()} { // Do somethingpublic class Class1 return 0;{ } public int DoSomething() } { // Do something return 0; }}
  42. 42. enumsenum Days {Sat, Sun, Mon, Tue, Wed, Thu, Fri};Days day = Days.Sat; Os enums são utilizados para descrever enumerações, de um conjunto de constantes.
  43. 43. Métodosprivate int makeColor (int r, int g, int b){ Vários métodos podem ter o // Do Stuff mesmo nome, desde que} recebam argumentosprivate int makeColor (int r, int g, int b, int a) diferentes.{ // Do Stuff Os métodos podem ter} argumentos opcionais. private int makeColor (int r, int g, int b, int a = 0) { // Do Stuff }
  44. 44. Passagem por referência Em C# podemos passarprivate int doStuff(){ argumentos por referência, e int foo = 4 não apenas por valor. updateValue(ref foo); Console.WriteLine(foo.ToString());} Para isso usamos a palavra reservada “ref” ou “out”.private void updateValue(ref int val){ val = val / 2 + 1; A palavra “ref” obriga a que} variável cuja referência é passada, já tenha sido inicializada.
  45. 45. namespacesusing System.Text;using System.Windows.Forms; Em C# temos namespaces, que permitem organizar onamespace SampleNamespace{ código e ter vários tipos com public class Class1 o mesmo nome. { } Um namespace pode conter} classes, intefaces, enums e structs.
  46. 46. Até agora vimos o básico…Mas onde está o verdadeiro poder do C# e da .NET Framework?
  47. 47. Ok, mas agora como é queuso a .NET Framework para fazer coisas?
  48. 48. ExemploConstruir um programa deque converta uma imagemque está no clipboard para preto e branco.
  49. 49. Numa bitmap de 24bits, cadapixel tem 3 componentes na sua cor, Red, Green e Blue.Para converter-mos para Black & White, calculamos a média das três componentes.
  50. 50. Mas como trabalhamos comimagens em C#, precisamos defazer download de bibliotecas? Não! Basta usar o System.Drawing!
  51. 51. Bitmap bp = (Bitmap)Clipboard.GetImage();Color color;int average;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);
  52. 52. Exemplo 2Construir o “esqueleto” de um web spider.
  53. 53. Mas como fazer download de ficheiro em C#? E como usar Regex para extrair os URLs?Precisamos de 2 bibliotecas e 1000 linhas de código?
  54. 54. Não! Basta usar o System.Net e o System.Text.RegularExpressions da .NET Framework!
  55. 55. using (WebClient client = new WebClient()){ string html = client.DownloadString("http://hackerschool.ist.utl.pt/"); Regex regex = new Regex("http://([w+?.w+])+([a-zA-Z0-9~!@#$%^&amp;*()_-=+/?.:;,]*)?",RegexOptions.IgnoreCase); MatchCollection matches = regex.Matches(html); foreach (Match match in matches) MessageBox.Show(match.Value.ToString());}
  56. 56. Que plataformas corremprogramas feitos em C#?
  57. 57. Windows… mas não só!
  58. 58. Com a Mono Framework, podemos correr C# em muitas outras plataformas!
  59. 59. Com a Mono Framework, podemos correr C# em muitas outras plataformas!
  60. 60. E o que uso para programar em C#?
  61. 61. Visual StudioA versão Express é gratuita, enquanto que a versão Ultimate é paga.
  62. 62. Visual Studio O IST tem uma parceriacom a Microsoft e fornece a versão Ultimate gratuita para alunos de alguns cursos!
  63. 63. MonoDevelopUma IDE opensource emulti-plataforma, paraWindows, Linux ou Mac
  64. 64. Emulador de NESDesenvolvido em C#
  65. 65. Jogo de Sokoban
  66. 66. Website: http://miguelpedroso.comEmail: miguelfsp@gmail.com contact@miguelpedroso.comHS: http://hackerschool.ist.utl.pt
  67. 67. Obrigado! @miguelpedroso
  68. 68. DesafioTrocar os valores de duas variaveis tipo “int”, sem recorrer a uma terceira variável temporária... E sem usar XORs! Ambos os valores iniciais só podem valer de 0 a 1000.
  69. 69. int a = 3;int b = 4;int temp;Como fazer a troca semrecorrer a variáveistemporárias ou a XORS?
  70. 70. 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);
  71. 71. 1 A 0000 00017 B 0000 0111 A 0000 0001 b |= (a << 4); B 0001 0111 A 0000 0111 a = b & 0x000F; B 0001 01117 A 0000 0111 b >>= 4;1 B 0000 0001

×