Sunteți pe pagina 1din 18

Ingeniera de Sistemas Programacin 3 Clase 2

Profesor David Lpez F.

Niveles de Accesibilidad

PUBLIC La palabra clave public es un modificador de acceso para tipos y miembros de tipos. El acceso de tipo public corresponde al nivel de acceso menos restrictivo. No existen restricciones para obtener acceso a los miembros pblicos, como en este ejemplo:

class SampleClass { public int x; // No access restrictions. }

Niveles de Accesibilidad

PRIVATE La palabra clave private es un modificador de acceso de miembros. El acceso de tipo private corresponde al nivel de acceso ms restrictivo. Los miembros privados slo son accesibles dentro del cuerpo de la clase o estructura en la que se declaran, como en el siguiente ejemplo.

class Employee { private int i; double d; // private access by default }

Niveles de Accesibilidad

PROTECTED La palabra clave protected es un modificador de acceso a miembros. Un miembro protegido es accesible dentro de su clase y por clases derivadas. Encontrar una comparacin de protected con los otros modificadores de acceso en Niveles de accesibilidad. Un miembro protegido de una clase base es accesible en una clase derivada slo si el acceso se realiza a travs del tipo de la clase derivada.

Niveles de Accesibilidad
PROTECTED
using System; class A { protected int x = 123; } class B : A { static void Main() { A a = new A(); B b = new B(); // Error CS1540, because x can only be accessed by // classes derived from A. // a.x = 10;

// OK, because this class derives from A. b.x = 10;


} }

Niveles de Accesibilidad
INTERNAL
La palabra clave internal es un modificador de acceso para tipos y miembros de tipos. Los tipos o miembros internos slo son accesibles dentro de los archivos del mismo ensamblado, como en este ejemplo:

public class BaseClass { // Only accessible within the same assembly internal static int x = 0; }

Un uso habitual del acceso de tipo interno se da en el desarrollo basado en componentes, ya que permite a un grupo de componentes cooperar de manera privada sin estar expuesto al resto del cdigo de la aplicacin. Por ejemplo, un marco de trabajo para compilar interfaces grficas de usuario podra proporcionar clases Control y Form que cooperan mediante miembros con acceso interno. Como estos miembros son internos, no estn expuestos al cdigo que utiliza la estructura.

Relacin entre Clases

class Motor { int caballos; public Motor() { } public Motor(int c) { caballos = c; } public int Caballos { set { caballos = value; } get { return caballos; } } }

class Batera { int voltaje; public Batera() { } public Batera(int b) { voltaje = b; } }

Relacin entre Clases


class Auto { Motor elMotor; //agregacion de contenido por valor Batera laBatera; //agregacion de contenido por referencia Consesionaria c; //Ascociacion public Auto() { } public Auto(Puerta xa) { elMotor = new Motor(); //las inicializo en el contructor, //ya que estan fisicamente contenidas en la clase agregado laBatera = new Batera(); //idem arriba c = new Consesionaria(); // xa = new Puerta(); //agregacion por referencia, le paso la referencia por parametros } }

class Puerta {

Relacin entre Clases


int posicin; public Puerta() { Console.Write("Ingrese posicion: "); posicin = int.Parse(Console.ReadLine()); } public int Posicion { set { posicin = value; } get { return posicin; } }

// Herede de la clase Auto class FordCapri : Auto { public FordCapri(Puerta xa) : base (xa) { Motor theMotor = new Motor(); theMotor.Caballos = 2000; } }

Relacin entre Clases


class Consesionaria { string nombre; string direccion; Auto a; public Consesionaria() { } public Consesionaria(string n, string d) { nombre = n; direccion = d; a = new Auto(); } } class Program { static void Main(string[] args) { Puerta pos; pos = new Puerta(); Auto a = new Auto(pos); } }

Polimorfismo
public class Cuenta { private string idCuenta; // Nmero de la cuenta
public Cuenta(string prmtIdCuenta) { this.idCuenta = prmtIdCuenta; System.Console.WriteLine( "Instancia creada para cuenta {0}",prmtIdCuenta); } public void CalcularIntereses() { System.Console.WriteLine("Cuenta.CalcularIntereses()"); } }

Polimorfismo
public class CuentaCorriente : Cuenta { public CuentaCorriente(string prmtIdCuenta) : base(prmtIdCuenta) { } new public void CalcularIntereses() { System.Console.WriteLine( "CuentaCorriente.CalcularIntereses()"); } } public class CuentaAhorro : Cuenta { public CuentaAhorro(string prmtIdCuenta) : base(prmtIdCuenta) { } new public void CalcularIntereses() { System.Console.WriteLine( "CuentaAhorro.CalcularIntereses()"); } }

public class Test { const string CUENTA = "100";

Polimorfismo

public static void Main(string[] args) { // Creamos instancia de clase base Cuenta cuenta = new Cuenta(CUENTA); // Creamos instancia de clase derivada CuentaCorriente cuentaCorriente = new CuentaCorriente(CUENTA); // Creamos instancia de clase derivada CuentaAhorro cuentaAhorro = new CuentaAhorro(CUENTA); // Invocamos mtodo de la clase base cuenta.CalcularIntereses(); // Invocamos mtodo de la clase derivada cuentaCorriente.CalcularIntereses(); // Invocamos mtodo de la clase derivada cuentaAhorro.CalcularIntereses(); } }

Abstract Class
public class ClaseVirtual { public int cv = 5; public ClaseVirtual() {} public virtual int DoWork(int i) { return i * 5; } public void MetodoVirtual() { } } public abstract class ClaseAbstracta : ClaseVirtual { protected int ca = 3; public ClaseAbstracta() { base.cv = 6; } public abstract override int DoWork(int i); public void MetodoAbstracta() { } }

Abstract Class
public class ClaseSimple : ClaseAbstracta { public ClaseSimple() { } public override int DoWork(int i) { // New implementation. return i * base.cv + base.ca; } public void MetodoSimple() { }

}
static void Main(string[] args) { int resultado; ClaseVirtual cs = new ClaseSimple(); Console.WriteLine("Area of Square = {0:F2}", resultado = cs.DoWork(3)); }

Clases y miembros de clase sellados


Una clase sellada no se puede utilizar como clase base. Por esta razn, tampoco puede ser una clase abstracta.

public class D : C { public sealed override void DoWork() { } }

Interfaces
interface ISampleInterface { void SampleMethod(); }
class ImplementationClass : ISampleInterface { // Explicit interface member implementation: void ISampleInterface.SampleMethod() { // Method implementation. } static void Main() { // Declare an interface instance. ISampleInterface obj = new ImplementationClass();

// Call the member. obj.SampleMethod();


} }

Gracias por la Atencin!

S-ar putea să vă placă și