我想定义一个操作符=尝试更改类的内部值
我正在c#中实现一个可能包含int
,bool
或double
的变量类型,并且我想重载=
运算符,以便可以做一些事情喜欢:
Variable bar = new Variable(1.2);
bar = 2.3;
我内部保留了初始化的类型,因此您不能在执行时更改类型,所以如果这样做:
Variable foo = new Variable(1.2);
foo = true;//ERROR, ilegal operation
引发异常。 我试图做:
public static Variable operator=(Variable variable, int value)
{
if (!variable.TrySetValue(value))
{
throw new Exception(string.Format("ERROR: you're trying to assing an 'int' value to an {0}",
Enum.GetName(typeof(Variable.Type), variable.type)));
}
return variable;
}
TrySetValue()
方法看起来像这样:
public bool TrySetValue(int value)
{
if (type == Type.INT)
{
this.value = value;
return true;
}
return false;
}
与bool
和double
相同
这给了我错误 Overloadable binary operator expected
。
我可以定义一个简单的public static implicit operator Variable(int i){...}
,但是我不想创建一个new Variable
,我想更改当前值 strong>如果可能的话,可变。
我知道我可以用C ++做到这一点,而且我想相信C#也可以做到。
我没有在互联网上找到类似的东西,所以请帮助我。
答案 0 :(得分:-2)
正如@madreflection所说,您不能重载=
。
但是,如果您想创建一个嵌入式数值,则可以实现以下方法:
static public explicit operator T(Variable value)
static public explicit operator Variable(T value)
public override int GetHashCode()
public virtual object Clone()
public override bool Equals(object value)
public bool Equals(T value)
public bool Equals(Variable value)
public bool ToBoolean(IFormatProvider provider)
public byte ToByte(IFormatProvider provider)
public char ToChar(IFormatProvider provider)
public DateTime ToDateTime(IFormatProvider provider)
public decimal ToDecimal(IFormatProvider provider)
public double ToDouble(IFormatProvider provider)
public short ToInt16(IFormatProvider provider)
public int ToInt32(IFormatProvider provider)
public long ToInt64(IFormatProvider provider)
public sbyte ToSByte(IFormatProvider provider)
public float ToSingle(IFormatProvider provider)
public string ToString(IFormatProvider provider)
public object ToType(Type conversionType, IFormatProvider provider)
public ushort ToUInt16(IFormatProvider provider)
public uint ToUInt32(IFormatProvider provider)
public ulong ToUInt64(IFormatProvider provider)
public TypeCode GetTypeCode()
static public bool operator ==(Variable v1, Variable v2)
static public bool operator ==(Variable v1, object v2)
static public bool operator ==(object v1, Variable v2)
static public bool operator !=(Variable v1, Variable v2)
static public bool operator !=(Variable v1, object v2)
static public bool operator !=(object v1, Variable v2)
public virtual int CompareTo(object obj)
static public bool operator <(Variable v1, Variable v2)
static public bool operator <(Variable v1, T v2)
static public bool operator <(T v1, Variable v2)
static public bool operator >(Variable v1, Variable v2)
static public bool operator >(Variable v1, T v2)
static public bool operator >(T v1, Variable v2)
static public bool operator <=(Variable v1, Variable v2)
static public bool operator <=(Variable v1, T v2)
static public bool operator <=(T v1, Variable v2)
static public bool operator >=(Variable v1, Variable v2)
static public bool operator >=(Variable v1, T v2)
static public bool operator >=(T v1, Variable v2)
static public Variable operator +(Variable v1, Variable v2)
static public Variable operator +(Variable v1, T v2)
static public Variable operator +(T v1, Variable v2)
static public Variable operator -(Variable v1, Variable v2)
static public Variable operator -(Variable v1, T v2)
static public Variable operator -(T v1, Variable v2)
static public Variable operator *(Variable v1, Variable v2)
static public Variable operator *(Variable v1, T v2)
static public Variable operator *(T v1, Variable v2)
static public Variable operator /(Variable v1, Variable v2)
static public Variable operator /(Variable v1, T v2)
static public Variable operator /(T v1, Variable v2)
我希望我没有忘记一些...
您可能想创建一个通用类,而不必为int,bool和double创建每个类:
Variable<T> where T : IComparable