c# - ¿Creando una clase de utilidades?
oop class (7)
Soy muy nuevo en OOP y estoy haciendo todo lo posible para mantener las cosas estrictamente basadas en clases, mientras uso buenos principios de codificación.
Ahora soy parte integrante de mi proyecto y tengo muchos métodos de uso general que quiero incluir en una clase de utilidades. ¿Hay una mejor manera de crear una clase de utilidades?
public class Utilities
{
int test;
public Utilities()
{
}
public int sum(int number1, int number2)
{
test = number1 + number2;
}
return test;
}
Después de crear esta clase de Utilidades, ¿acabo de crear un objeto de Utilidades y ejecutar los métodos de mi elección? ¿Tengo esta idea de clase de Utilities correcta?
Aunque es nuevo en OOP y trata de manejar las mejores prácticas, puede ser una buena idea tratar de evitar las clases de utilidad. Podrías rediseñar tu clase como
public class Sum
{
private int _result;
public int Result {
get {
return _result;
}
}
public Sum(int startNum) {
_results = startNum;
}
public void Add(int num) {
_result += num;
}
}
Y se llama así:
Sum sum = new Sum(1);
sum.add(2);
int result = sum.Result;
Será una buena práctica hasta que una mayor experiencia con OOP pueda ayudarlo a examinar las ventajas y desventajas de utilizar una clase de utilidad frente a los principios POO puros.
Deberías convertirlo en una clase static
, como esta:
public static class Utilities {
public static int Sum(int number1, int number2) {
return number1 + number2;
}
}
int three = Utilities.Sum(1, 2);
La clase debería (normalmente) no tener ningún campo o propiedad. (A menos que desee compartir una sola instancia de algún objeto en su código, en cuyo caso puede crear una propiedad static
de solo lectura).
Lo mejor es hacer que las funciones no sean confiables para los miembros de una clase. Por lo tanto, puede hacer que las funciones sean estáticas.
Mejor es hacer de las funciones un método de extensión de un tipo. ver aquí por ejemplo
Lo mejor será usar una clase static
con métodos static
. Entonces no necesitarás instanciar tu clase de utilidades para usarlo. Se verá algo como esto:
public static Utilites
{
public static int sum(int number1, int number2)
{
test = number1+number2;
return test;
}
}
Entonces puedes usarlo así:
int result = Utilites.sum(1, 3);
hacer esto.
public static class Utilities
{
int test;
public static int sum(int number1, int number2)
{
test = number1+number2;
return test;
}
}
De esa manera lo usas como
int result = Utilities.sum(1, 2);
Si está trabajando con .NET 3.0 o superior, debe buscar métodos de extensión. Le permiten escribir una función static
que actuará contra un tipo particular, como Int32
, mientras que parece ser un método en ese objeto. Entonces podrías tener: int result = 1.Add(2);
.
Probar esto; podría mostrarte otra forma. ;)
sí, esto no se compila porque la prueba int que no se admite dentro de la clase estática lo hace como prueba int estática que será compatible y devuelve la salida