所以一位朋友告诉我游戏是如何被黑客入侵的,以及该技术是如何运作的.然后他问最新的防止这种攻击的方法.我知道的最直接的方式是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
你正在寻找implicit和explicit操作员,而不是说=.这允许您定义在隐式(即,仅仅是赋值)和显式(即,有一个转换运算符)时强制转换的方式.
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)