C# Clases (Class)
Cuando defines una clase, defines un modelo (blueprint) de un tipo de datos. Esto en realidad no define ningún dato, pero define qué significa el nombre de la clase, es decir, de qué está compuesto un objeto de la clase y qué operaciones se pueden realizar sobre ese objeto. Un objeto es una instancia de una clase. Los métodos y variables que constituyen la clase se denominan miembros de la clase.
Definición de clases
La definición de una clase comienza con la palabra claveclassy continúa con el nombre de la clase. El cuerpo de la clase se encierra entre un par de llaves. A continuación se muestra la forma general de la definición de una clase:
{
// member variables
<access specifier> <data type> variable1;
<access specifier> <data type> variable2;
...
<access specifier> <data type> variableN;
// member methods
<access specifier> <return type> method1(parameter_list)
{
// method body
}
<access specifier> <return type> method2(parameter_list)
{
// method body
}
...
<access specifier> <return type> methodN(parameter_list)
{
// method body
}
}
Tenga en cuenta:
- El especificador de acceso <access specifier> especifica las reglas de acceso para la clase y sus miembros. Si no se especifica, se utiliza el especificador de acceso predeterminado. El especificador de acceso predeterminado de una clase esinternaly el especificador de acceso predeterminado de un miembro esprivate。
- El tipo de datos <data type> especifica el tipo de una variable; el tipo de retorno <return type> especifica el tipo de datos que devuelve el método.
- Para acceder a los miembros de una clase, se utiliza el operador punto (.).
- El operador punto vincula el nombre del objeto con el nombre del miembro.
El siguiente ejemplo ilustra los conceptos discutidos hasta ahora:
Ejemplo
namespace BoxApplication
{
class Box
{
public double length; // Longitud
public double breadth; // Ancho
public double height; // Altura
}
class Boxtester
{
static void Main(string[] args)
{
Box Box1 = new Box(); // Declara Box1, de tipo Box
Box Box2 = new Box(); // Declara Box2, de tipo Box
double volume = 0.0; // Volumen
// Detalles de Box1
Box1.height = 5.0;
Box1.length = 6.0;
Box1.breadth = 7.0;
// Detalles de Box2
Box2.height = 10.0;
Box2.length = 12.0;
Box2.breadth = 13.0;
// Volumen de Box1
volume = Box1.height * Box1.length * Box1.breadth;
Console.WriteLine("Volumen de Box1: {0}", volume);
// Volumen de Box2
volume = Box2.height * Box2.length * Box2.breadth;
Console.WriteLine("Volumen de Box2: {0}", volume);
Console.ReadKey();
}
}
}
Cuando el código anterior se compila y ejecuta, produce el siguiente resultado:
Box1 的体积: 210 Box2 的体积: 1560
Funciones miembro y encapsulación
Una función miembro de una clase es una función que tiene su definición o prototipo dentro de la definición de la clase, al igual que otras variables. Como miembro de la clase, puede operar sobre cualquier objeto de la clase y acceder a todos los miembros de la clase de ese objeto.
Las variables miembro son atributos del objeto (desde una perspectiva de diseño) y se mantienen privadas para lograr encapsulación. Estas variables solo se pueden acceder mediante funciones miembro públicas.
Usemos los conceptos anteriores para establecer y obtener los valores de los diferentes miembros de una clase:
Ejemplo
namespace BoxApplication
{
class Box
{
private double length; // Longitud
private double breadth; // Ancho
private double height; // Altura
public void setLength( double len )
{
length = len;
}
public void setBreadth( double bre )
{
breadth = bre;
}
public void setHeight( double hei )
{
height = hei;
}
public double getVolume()
{
return length * breadth * height;
}
}
class Boxtester
{
static void Main(string[] args)
{
Box Box1 = new Box(); // Declara Box1, de tipo Box
Box Box2 = new Box(); // Declara Box2, de tipo Box
double volume; // Volumen
// Detalles de Box1
Box1.setLength(6.0);
Box1.setBreadth(7.0);
Box1.setHeight(5.0);
// Detalles de Box2
Box2.setLength(12.0);
Box2.setBreadth(13.0);
Box2.setHeight(10.0);
// Volumen de Box1
volume = Box1.getVolume();
Console.WriteLine("Volumen de Box1: {0}" ,volume);
// Volumen de Box2
volume = Box2.getVolume();
Console.WriteLine("Volumen de Box2: {0}", volume);
Console.ReadKey();
}
}
}
Cuando el código anterior se compila y ejecuta, produce el siguiente resultado:
Box1 的体积: 210 Box2 的体积: 1560
Constructores en C#
de la claseconstructores una función miembro especial de la clase que se ejecuta cuando se crea un nuevo objeto de la clase.
El nombre del constructor es exactamente igual al nombre de la clase y no tiene ningún tipo de retorno.
El siguiente ejemplo ilustra el concepto de constructor:
Ejemplo
namespace LineApplication
{
class Line
{
private double length; // Longitud de la línea
public Line()
{
Console.WriteLine("Objeto creado");
}
public void setLength( double len )
{
length = len;
}
public double getLength()
{
return length;
}
static void Main(string[] args)
{
Line line = new Line();
// Establecer la longitud de la línea
line.setLength(6.0);
Console.WriteLine("Longitud de la línea: {0}", line.getLength());
Console.ReadKey();
}
}
}
Cuando el código anterior se compila y ejecuta, produce el siguiente resultado:
对象已创建 线条的长度: 6
Constructor predeterminadoNo tiene ningún parámetro. Pero si necesitas un constructor con parámetros, puede tener parámetros; este tipo de constructor se llamaconstructor parametrizado. Esta técnica te ayuda a asignar valores iniciales al objeto al mismo tiempo que lo creas. Consulta el siguiente ejemplo:
Ejemplo
using System;
namespace LineApplication
{
class Line
{
private double length; // Longitud de la línea
public Line(double len) // Constructor parametrizado
{
Console.WriteLine("Objeto creado, length = {0}", len);
length = len;
}
public void setLength( double len )
{
length = len;
}
public double getLength()
{
return length;
}
static void Main(string[] args)
{
Line line = new Line(10.0);
Console.WriteLine("Longitud de la línea: {0}", line.getLength());
// Establecer la longitud de la línea
line.setLength(6.0);
Console.WriteLine("Longitud de la línea: {0}", line.getLength());
Console.ReadKey();
}
}
}
Cuando el código anterior se compila y ejecuta, produce el siguiente resultado:
对象已创建,length = 10 线条的长度: 10 线条的长度: 6
Destructores en C#
de la clasedestructores una función miembro especial de la clase que se ejecuta cuando un objeto de la clase queda fuera del alcance.
El nombre del destructor es el nombre de la clase precedido por una tilde (~), no devuelve ningún valor y no acepta ningún parámetro.
El destructor se utiliza para liberar recursos antes de finalizar el programa (como cerrar archivos, liberar memoria, etc.). El destructor no se puede heredar ni sobrecargar.
El siguiente ejemplo ilustra el concepto de destructor:
Ejemplo
using System;
namespace LineApplication
{
class Line
{
private double length; // Longitud de la línea
public Line() // Constructor
{
Console.WriteLine("Objeto creado");
}
~Line() // Destructor
{
Console.WriteLine("Objeto eliminado");
}
public void setLength( double len )
{
length = len;
}
public double getLength()
{
return length;
}
static void Main(string[] args)
{
Line line = new Line();
// Establecer la longitud de la línea
line.setLength(6.0);
Console.WriteLine("Longitud de la línea: {0}", line.getLength());
}
}
}
Cuando el código anterior se compila y ejecuta, produce el siguiente resultado:
对象已创建 线条的长度: 6 对象已删除
Miembros estáticos de una clase en C#
la palabra clavestaticdefine los miembros de la clase como estáticos. Cuando declaramos un miembro de la clase como estático, significa que sin importar cuántos objetos de la clase se creen, solo habrá una copia de ese miembro estático.
la palabra clavestaticsignifica que solo hay una instancia de ese miembro en la clase. Las variables estáticas se utilizan para definir constantes, porque sus valores se pueden obtener llamando directamente a la clase sin necesidad de crear una instancia de la clase. Las variables estáticas se pueden inicializar fuera de la función miembro o de la definición de la clase. También puedes inicializar variables estáticas dentro de la definición de la clase.
El siguiente ejemplo demuestravariable estáticasu uso:
Ejemplo
namespace StaticVarApplication
{
class StaticVar
{
public static int num;
public void count()
{
num++;
}
public int getNum()
{
return num;
}
}
class StaticTester
{
static void Main(string[] args)
{
StaticVar s1 = new StaticVar();
StaticVar s2 = new StaticVar();
s1.count();
s1.count();
s1.count();
s2.count();
s2.count();
s2.count();
Console.WriteLine("La variable num de s1: {0}", s1.getNum());
Console.WriteLine("La variable num de s2: {0}", s2.getNum());
Console.ReadKey();
}
}
}
Cuando el código anterior se compila y ejecuta, produce el siguiente resultado:
s1 的变量 num: 6 s2 的变量 num: 6
También puedesfunción miembrodeclarar comostatic. Tal función solo puede acceder a variables estáticas. Las funciones estáticas existen antes de que se cree un objeto. El siguiente ejemplo demuestrafunción estáticasu uso:
Ejemplo
namespace StaticVarApplication
{
class StaticVar
{
public static int num;
public void count()
{
num++;
}
public static int getNum()
{
return num;
}
}
class StaticTester
{
static void Main(string[] args)
{
StaticVar s = new StaticVar();
s.count();
s.count();
s.count();
Console.WriteLine("Variable num: {0}", StaticVar.getNum());
Console.ReadKey();
}
}
}
Cuando el código anterior se compila y ejecuta, produce el siguiente resultado:
变量 num: 3Otras extensiones