使用隐式运算符重载

时间:2017-05-21 19:33:43

标签: c# struct casting operator-overloading operators

我创建了以下结构来跟踪我用于游戏的所有网络ID:

public struct NetworkId {
    private static int _availibleId = 1;

    private int _id;

    public static implicit operator int(NetworkId i) {
        if (i._id == 0) {
            i._id = _availibleId++;
        }

        return i._id;
    }
}

我在有人试图访问它时初始化ID。但我现在的问题是,当我在下面的例子中使用id时,每次都会重新分配ID。

public class TestObject {
    private NetworkId _id;
    public NetworkId Id { get { return _id; } }

    public void Create {
        NetworkManager.SendPacket(new Packets.CreateObject(Id));
    }
}

我无法绕过这里发生的事情。谢谢你的帮助!

1 个答案:

答案 0 :(得分:0)

它需要是一个结构吗?使用类语义执行此操作:

public class NetworkId
{
    private static int _availibleId = 1;
    public int Id { get; } = _availibleId++;

    public static implicit operator int(NetworkId i)
    {
        return i.Id;
    }
}

void Test() {
    int A = new NetworkId();  //A=1
    int B = new NetworkId();  //B=2
}