簡體   English   中英

重載operator =在C#中。 我怎么能接受其他類型?

[英]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
    }
}

你正在尋找implicitexplicit運算符,而不是說= 這允許您定義在隱式(即,僅僅是賦值)和顯式(即,有一個轉換運算符)時強制轉換的方式。

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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM