[英]overload operator = in C#. How can i accept other types?
所以一位朋友告訴我游戲是如何被黑客入侵的,以及該技術是如何運作的。 然后他問最新的防止這種攻擊的方法。 我知道的最直接的方式是A)洗牌重要值的比特B)散列值並每次比較它們(保持得分或金錢的int很可能很少被檢查)。
然后我嘗試在C#中實現,我無法重載=運算符。 我怎樣才能做到這一點?
前代碼。
class EncryptVal <T>
{
T v;
public T operator = (T v2)
{
//shuffle bits
}
public T operator ()()
{
//return unshuffle bits
}
}
你正在尋找implicit
和explicit
運算符,而不是說=
。 這允許您定義在隱式(即,僅僅是賦值)和顯式(即,有一個轉換運算符)時強制轉換的方式。
public static implicit operator Type1(Type2 p) {}
public static explicit operator Type1(Type2 p) {}
您可以將值封裝在類中,並重載與類之間的隱式轉換:
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;
}
}
用法:
// implicit conversion from int
EncryptVal<int> e = 42;
// implicit conversion to int
int i = e;
不允許在C#中重載賦值運算符。 這是關於它的MSDN文檔 。
您必須為此行為創建自己的函數。
我假設您來自C ++,其中編寫像原始數據類型一樣使用的類是很常見的。 在C#中,您可以更明確地執行操作。
我會把它寫成屬性或兩種方法,例如:
class EncryptVal <T>
{
T v;
public T Value
{
get
{
//return unshuffle bits
}
set
{
//shuffle bits
}
}
}
不要使用=來設置值。 你不能超載任務。
你能做的就是把它隱藏在一個房產后面。
int _encyptedValue;
Public int myInt
{
get
{
return Decrypt(_encryptedValue);
}
set
{
_encryptedValue = Encrypt(value);
}
}
你可以選擇解密/加密
我會為實現部分進行隱式/顯式運算符重載。
可能是明確的,因為您的轉換會進行大量處理,並且最終可能會失敗。
我只想補充說,洗牌位似乎只是一種混淆技術,如果你對你的游戲感興趣,那肯定會持續很長時間。 您可能需要更強大的加密來保護您的數據,但需要更多的上下文。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.