Você está na página 1de 24

C#

Módulo 8: Variáveis do Tipo Referência

1
Comparar variáveis do tipo valor com
variáveis do tipo referência

2
Declarar e largar variáveis do tipo referência

coordinate c1;
c1 = new coordinate();
c1.x = 6.12;
c1.y = 4.2;

3
Referências inválidas
Se existem referências inválidas
- Não se pode aceder aos membros ou variáveis
Referências inválidas em tempo de compilação:
- O compilador detecta o uso de referências não inicializadas
coordinate c1;
c1.x = 6.12; // Will fail: variable not assigned

Referências inválidas em tempo de execução:


- O sistema gera uma excepção
try {
c1.x = 45;
}
catch (NullReferenceException) {
Console.WriteLine("c1 has a null value");
} 4
Comparar valores e comparar referências

5
Comparar valores e comparar referências

coordinate c1= new coordinate( );


coordinate c2= new coordinate( );
c1.x = 1.0;
c1.y = 2.0;
c2.x = 1.0;
c2.y = 2.0;
if (c1 == c2)
Console.WriteLine("Same");
else
Console.WriteLine("Different");

Qual o resultado?

6
Várias referências para o mesmo objecto

Duas variáveis podem apontar para o mesmo objecto:

coordinate c1= new coordinate( );


coordinate c2;
c1.x = 2.3; c1.y = 7.6;
c2 = c1;
Console.WriteLine(c1.x + " , " + c1.y);
Console.WriteLine(c2.x + " , " + c2.y);

7
Várias referências para o mesmo objecto

As referências podem ser passadas como parâmetros:

8
Classe Exception

- Exception é uma classe

- Os objectos Exception são usados para desencadear excepções


- Criar excepções: new
- Desencadear excepções: throw

- Os tipos excepção são subclasses da classe Exception

9
Classe String

- Cadeia de caracteres Unicode

- Atalho para System.String

- Imutável

string s = "Hello";
s[0] = 'c'; // Erro em tempo de execução

10
Strings: Métodos, Operadores e Propriedades
-[]
string s = "Alphabet";
char firstchar = s[2]; // 'p'

- Insert()
string s = "C is great!";
s = s.Insert(2, "Sharp ");
Console.WriteLine(s); // C Sharp is great!

- Length
string msg = "Hello";
int slen = msg.Length; // 5

- Copy( )
string s1 = "Hello";
string s2 = String.Copy(s1);

11
Strings: Métodos, Operadores e Propriedades
- Concat()
string s3 = String.Concat("a", "b", "c", "d", "e", "f", "g");

- Trim()
string s = " Hello ";
s = s.Trim( );
Console.WriteLine(s); // "Hello"

- ToUpper() e ToLower()
string sText = "How to Succeed ";
Console.WriteLine(sText.ToUpper( )); // HOW TO SUCCEED
Console.WriteLine(sText.ToLower( )); // how to succeed

12
Strings: Comparação
- Equals( )
string s1 = "Welcome";
string s2 = "Welcome";
if (s1.Equals(s2))
Console.WriteLine("The strings are the same");
if (String.Equals(s1,s2))
Console.WriteLine("The strings are the same");

- Compare( )
string s1 = "Tintinnabulation";
string s2 = "Velocipede";
int comp = String.Compare(s1,s2); // Negative return

s1 = "cabbage";
s2 = "Cabbage";
comp = String.Compare(s1, s2, true); // Ignore case

13
Strings: Operadores de Comparação
- a == b e a != b

== é equivalente a String.Equals( )

string a = "Test";
string b = "Test";
if (a == b) ... // Returns true

14
A classe Object

A palavra “object” é sinónimo de System.Object e é a base de


todas as outras classes.
Não é necessário indicá-o explicitamente.

15
Métodos comuns
- ToString( )
- Devolve uma String que representa o objecto receptor
- Equals( )
- Determina se o objecto passado por parâmetro é a mesma
instância do objecto receptor
- GetType( )
- Permite extracção de informação do tipo em tempo de
execução.
- Finalize( )
- É chamado em tempo de execução quando um objecto se torna
inacessível

16
Reflexão (System.Reflection)
- Pode saber-se o tipo de um objecto

x.GetType()

using System;
using System.Reflection;
Type t = typeof(byte);
Console.WriteLine("Type: {0}", t);

using System;
using System.Reflection;
Type t = typeof(string); // Get type information
MethodInfo[ ] mi = t.GetMethods( );
foreach (MethodInfo m in mi) {
Console.WriteLine("Method: {0}", m);
}

17
Namespaces
- System.IO
Access to file system input/output
File, Directory
StreamReader, StreamWriter
FileStream
BinaryReader, BinaryWriter
using System;
using System.IO; // Use IO namespace
// ...
StreamReader reader = new StreamReader("infile.txt");
// Text in from file
StreamWriter writer = new StreamWriter("outfile.txt");
// Text out to file
string line;
while ((line = reader.ReadLine( )) != null)
{
writer.WriteLine(line);
}
reader.Close( );
writer.Close( ); 18
Namespaces

- System.Data

- System.Data.SqlClient

- System.Net

- System.Net.Sockets

- System.Windows.Forms

-…

19
Conversão de Tipos Valor
- Conversões implícitas

int a = 4;
long b;
b = a; // Implicit conversion of int to long

- Conversões explícitas
int a;
long b = 7;
a = (int) b;

- Excepções
try {
a = checked((int) b);
}
catch (Exception) {
Console.WriteLine("Problem in cast");
} 20
Conversão entre classes

- Conversões entre subclasses e superclasses


Animal
- Conversões implícitas sempre possíveis

Animal a; Bird

Bird b = new Bird(...);


a = b;

- Conversões entre superclasses e subclasses Animal

- São necessárias conversões explícitas


- Caso se realize uma referência esta tem de ser validada Bird

- Desencadeia uma excepção InvalidCastException caso


não seja válida

Animal a;
Bird b = (Bird) a; // Okay
b = a; //Will not compile

21
O operador is

- Se uma conversão pode ser feita devolve true

Bird b;
if (a is Bird)
b = (Bird) a; // Safe
else
Console.WriteLine("Not a Bird");

22
O operador as

- Converte entre classes, como o cast


- Caso exista erro
- Devolve null
- Não desencadeia uma excepção

Bird b = a as Bird; // Convert


if (b == null)
Console.WriteLine("Not a bird");

23
Boxing e Unboxing

- Converte entre classes, como o cast


- Caso exista erro
- Devolve null
- Não desencadeia uma excepção

boxing
int p = 123; unboxing
object box; 123 p = (int)box;
box = p;

123

24

Você também pode gostar