重载operator =在C#中.我怎么能接受其他类型?

2 c# operator-overloading

所以一位朋友告诉我游戏是如何被黑客入侵的,以及该技术是如何运作的.然后他问最新的防止这种攻击的方法.我知道的最直接的方式是A)洗牌重要值的比特B)散列值并每次比较它们(保持得分或金钱的int很可能很少被检查).

然后我尝试在C#中实现,我无法重载=运算符.我怎样才能做到这一点?

前代码.

class EncryptVal <T>
{
    T v;
    public T operator = (T v2)
    {
        //shuffle bits
    }
    public T operator ()()
    {
        //return unshuffle bits
    }
}
Run Code Online (Sandbox Code Playgroud)

Ada*_*son 13

你正在寻找implicitexplicit操作员,而不是说=.这允许您定义在隐式(即,仅仅是赋值)和显式(即,有一个转换运算符)时强制转换的方式.

public static implicit operator Type1(Type2 p) {}
public static explicit operator Type1(Type2 p) {}
Run Code Online (Sandbox Code Playgroud)


Guf*_*ffa 10

您可以将值封装在类中,并重载与类之间的隐式转换:

public class EncryptVal<T> {

    private T _value;

    private EncryptVal(T value) {
        _value = value;
    }

    public static implicit operator EncryptVal<T>(T value) {
        //shuffle bits
        return new EncryptVal<T>(value);
    }

    public static implicit operator T(EncryptVal<T> value) {
        //unshuffle bits
        return value._value;
    }

}
Run Code Online (Sandbox Code Playgroud)

用法:

// implicit conversion from int
EncryptVal<int> e = 42;

// implicit conversion to int
int i = e;
Run Code Online (Sandbox Code Playgroud)