Saltar al contenido

¡Esto es todo! Usando esta referencia en C#

C# apoya plenamente el Paradigma Orientado a Objetos, incluyendo los conceptos de encapsulación , herencia , y polimorfismo .

Encapsulado: Este término significa que un grupo de propiedades, métodos y miembros relacionados son tratados como una sola unidad a la que nos referimos como un objeto.

¡Esto es todo! Usando esta referencia en C#
¡Esto es todo! Usando esta referencia en C#

Herencia: Este término se refiere a la capacidad de crear una nueva clase basada en una clase existente.

Polimorfismo: Este término se refiere a la idea de que se pueden tener múltiples clases que son intercambiables, y cada clase puede implementar un método o propiedad de manera diferente.

Los términos clase y objeto , o instancia, se utilizan a veces indistintamente. Sin embargo, debemos ser cuidadosos ya que estos términos se refieren a cosas diferentes. De hecho, las clases describen un tipo específico de objeto u objetos, mientras que los objetos son instancias utilizables de las clases. Llamamos al acto de crear un objeto instanciación .

En el lenguaje cotidiano, podríamos decir que las clases se asemejan a los animales, y los objetos se parecen a un perro, un gato o cualquier otro tipo de animal que se nos ocurra. O, si estás familiarizado con la antigua filosofía griega, podrías decir que las clases son como ideas, y los objetos son la encarnación de una idea. Por ejemplo, está el concepto de amor, y hay situaciones en las que se ama a alguien.

¡Creemos una clase de muestra e instálenla!

1234567891011121314151617181920212223 usando el sistema;namespace ThisReference{publicclassThisRef{publicclassSampleClass{publicstring SampleProperty {get;set;}publicstringSampleMethod(string message){regresar $"Este es el mensaje: {message}";}}estaticvoidMain(String[] args){SampleClass test =newSampleClass(); test.SampleProperty =""; Console.WriteLine($"Este es el valor de SampleProperty: {test.SampleProperty}"); Console.WriteLine($"Este es el mensaje del SampleMethod: {test.SampleMethod("Esto es genial")}"); Console.Read();}}}

csharp

La salida se ve así.

bash

Este ejemplo es importante por múltiples razones. Demostró la auto-propiedad y cómo puede implementar propiedades y métodos en sus clases y llamarlos.

Fíjate en cómo establecemos la línea SampleProperty con la línea test.SampleProperty, que en realidad funciona porque implementamos el {get;set;} en la propiedad. También llamamos al SampleMethod, que devolvió una cadena con el mensaje especificado. Esta fue una demostración muy básica, así que vamos a complicar las cosas un poco más.

Vamos a demostrar nuestra herencia.

12345678910111213141516171819202122232425262728293031 usando el sistema;namespace ThisReference{publicclassEstaRef{publicclassA{publicstring whatstring ="Valor por defecto";publicvoidWhatMethod(){ Console.WriteLine($"Viniendo de la clase A, qué cadena: {whatstring}! ");}}publicclassB:A{publicvoidsetstring(string newvalue){ whatstring = newvalue;}}staticvoidMain(String[] args){B c =newB(); Console.WriteLine($"Valor por defecto de whatstring: {c. whatstring} procedente de la clase A!"); c.setstring("Nuevo valor"); Console.WriteLine($"Llamada del método heredado de WhatMethod: c.setstring() con el resultado de: {c.whatstring}"); Console.Read();}}

csharp

El resultado se ve así.

12Valor por defecto de qué cuerda: Valor por defecto procedente de la clase A! Llamando al método heredado de WhatMethod: c.setstring() con el resultado de: Nuevo valor

bash

Note cómo heredamos la propiedad de whatstring de la clase base A, junto con la función llamada WhatMethod. Sólo llamamos al método settring implementado en la clase B para modificar la propiedad heredada. Entonces la salida concluye nuestras modificaciones y muestra la definición misma de la herencia.

123456789101112131415161718192021222324252627282930313233343536 usando el Sistema;namespace ThisReference{clase públicaEsteRef{clase públicaPolyMomo{cadena pública PropiedadUno ="DefaultUno";cadena pública PropiedadDos ="DefaultDos"; publicvoidProperties(string one,string two){ PropertyOne = one; PropertyTwo = two;}publicvoidProperties(string onlyFirst){ PropertyOne = onlyFirst;}}estaticvoidMain(String[] args){PolyMomo Demo =newPolyMomo(); Console. WriteLine($"Valores de la propiedad antes del cambio, PropertyOne: {Demo. PropertyOne}, PropertyTwo: {Demo.PropertyTwo}"); Demo.Properties("first", "second"); Console.WriteLine($"Ambas propiedades fueron cambiadas PropertyOne: {Demo.PropertyOne}, y PropertyTwo: {Demo.PropertyTwo}");PolyMomo DemoTwo =newPolyMomo(); Console. WriteLine($"Valor de la propiedad antes del cambio, PropertyOne: {Demo.PropertyOne}!"); DemoTwo.Properties("OnlyFirst"); Console.WriteLine($"Sólo la primera propiedad se cambió a: {DemoTwo.PropertyOne}"); Console.Read();}}}

csharp

Esto nos da el siguiente resultado:

1234Valor de la propiedad antes del cambio, PropertyOne: DefaultOne, PropertyTwo: DefaultTwoB Both propiedades fueron cambiadas PropertyOne: first, and PropertyTwo: secondValor de la propiedad antes del cambio, PropertyOne: first!Only first property was changed to: OnlyFirst

bash

Esta demostración es perfecta para demostrar la naturaleza polimórfica de nuestra clase. Hemos definido el método de las propiedades con dos firmas. La primera cambia las dos propiedades que tenemos en nuestra clase. La segunda cambia sólo el valor de la Propiedad Uno de nuestra clase.

Sin embargo, hay una trampa. Si queremos cambiar sólo la segunda propiedad, llamada PropiedadDos, no podemos definir la siguiente función.

1234publicvoidProperties(string onlySecond){ PropertyTwo = onlySecond;}

csharp

Esto nos da el error:

Esto significa que el mismo tipo de firma de parámetros no puede estar presente en nuestra clase.