es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Operador implícito C# genérico para restar/sumar un entero

Tengo esta clase en C#:

public class MyClass<a, b=""> where B : OtherClass<a>
{
    [SerializeField] A _value = default;

    public A Value 
    {
        get => _value;
        set => _value = value;
    }

    public static implicit operator A(MyClass<a, b=""> variable)
    {
        return variable.Value;
    }
}

Me gustaría poder hacer esto:

MyClass<int,></int,><int>> myVar = new MyClass<int,></int,><int>>();
myVar.Value = 5;
myVar -= 3; // esto no es válido en realidad y deseo que sea válido.

¿Hay alguna forma que desconozco para lograr esto?
Hazme saber si necesitas más información.</a,></a,>

Tags:  , , , ,

Answer

  1. Avatar for davy.ai

    El código proporcionado muestra la clase MyClass, que tiene un parámetro de tipo genérico A y otro parámetro de tipo genérico B que está restringido a ser de tipo OtherClass con un argumento de tipo A. La clase MyClass también tiene un campo _value de tipo A y una propiedad Value de tipo A con métodos de getter y setter. Además, hay un operador de conversión implícito que sobrecarga la conversión de MyClass<a, b=""> a tipo A.

    La funcionalidad deseada es poder realizar la operación de resta en objetos de MyClass. Sin embargo, dado que MyClass no implementa los métodos de operador necesarios para la resta, la expresión myVar -= 3 es inválida.

    Una posible solución sería definir un método de operador para la resta que tome un objeto MyClass<a, b=""> y un valor entero, realice la resta en la propiedad Value y devuelva un objeto MyClass<a, b=""> con el valor actualizado. Aquí hay un ejemplo de implementación:

    public static MyClass<a, b=""> operator -(MyClass<a, b=""> mc, int value)
    {
        mc.Value -= value;
        return mc;
    }
    

    Con este método de operador definido, la expresión myVar -= 3 sería válida y se restaría 3 de la propiedad Value de myVar.</a,></a,></a,></a,></a,>

Comments are closed.