Rid
Значение-дескриптор серверного ресурса; не владелец и не проверка его существования.
Rid — структура со значением Id. default(Rid) имеет Id = 0. Копирование значения не продлевает жизнь серверного объекта. IsValid проверяет только Id != 0; после FreeRid сохранённые копии не обнуляются.
Освобождайте только созданные вами серверные объекты через соответствующий сервер. Rid, прочитанный из Resource.GetRid(), заимствован: не вызывайте для него FreeRid самостоятельно. Сохранённый RID также не удерживает сам Resource.
Ниже полный синхронный пример для временного PhysicsServer2D space. Use принимает Action<Rid>, освобождает своё пространство в finally и пропускает исключение обработчика вызывающему коду. Обработчик заимствует дескриптор только на время вызова: не освобождайте, не сохраняйте его и не передавайте async-лямбду.
using System;
using Reckfell;
public static class TemporaryPhysicsSpace
{
// The callback borrows the handle until it returns; it must not free or retain it.
public static void Use(Action<Rid> action)
{
ArgumentNullException.ThrowIfNull(action);
Rid owned = PhysicsServer2D.SpaceCreate();
if (!owned.IsValid)
throw new InvalidOperationException("Could not create a physics space.");
try
{
action(owned);
}
finally
{
PhysicsServer2D.FreeRid(owned);
owned = default;
}
}
}Объявления сверены с C# SDK 1.0.0. Раскройте имя, чтобы увидеть сигнатуры и описание.
Конструкторы1
RidКонструктор
public Rid(ReckfellObject from);Для Resource получает существующий дескриптор через GetRid(). Для объекта другого типа, включая null во время выполнения, возвращает нулевой RID. Не создаёт серверный ресурс, не копирует Resource и не передаёт владение. Не всякий Resource предоставляет ненулевой RID.
| Имя | Тип | По умолчанию |
|---|---|---|
from | ReckfellObject | — |
fromРесурс, чей GetRid() нужно прочитать. Обычная Entity не преобразуется в свой серверный объект этим конструктором.
Свойства2
IdСвойство
public ulong Id { get; }Непрозрачный 64-битный идентификатор; у default(Rid) равен 0. Число не является путём к ассету, ID Entity или доказательством существования ресурса. Не сохраняйте его как постоянную ссылку между запусками.
IsValidСвойство
public bool IsValid { get; }Возвращает Id != 0. Не обращается к серверу и не проверяет существование объекта, его тип или владение. После FreeRid сохранённая копия всё ещё может возвращать true; сбросьте собственную переменную в default после освобождения.
Методы6
Equals2 перегрузки
public bool Equals(Rid other);Сравнивает числовые Id двух значений. Два нулевых RID равны; равенство ненулевых значений не подтверждает, что соответствующий объект ещё существует.
| Имя | Тип | По умолчанию |
|---|---|---|
other | Rid | — |
otherЗначение RID для сравнения; серверный запрос не выполняется.
booltrue при одинаковых Id, иначе false.
public override bool Equals(object? obj);Возвращает true, только если obj содержит упакованный Rid с таким же Id. null, ulong с тем же числом и строка с представлением RID не равны этому значению.
| Имя | Тип | По умолчанию |
|---|---|---|
obj | object | — |
objОбъект для проверки типа и значения Rid.
booltrue для Rid с одинаковым Id; false для другого Id, типа или null.
GetHashCodeint
public override int GetHashCode();Вычисляет HashCode.Combine(Id) для коллекций C#. Равные значения имеют одинаковый хеш в текущем процессе; разные значения могут иметь одинаковый хеш. Не используйте его как постоянный идентификатор или проверку существования ресурса.
int32-битный хеш значения Id; стабильность между запусками не гарантируется.
ToStringstring
public override string ToString();Создаёт строку RID(<Id>) с десятичным Id в инвариантной культуре; нулевое значение записывается как RID(0). Это диагностическое представление, а не сериализация ресурса или способ восстановить его.
stringДиагностическая строка вида RID(123); текущая культура не меняет формат Id.
op_Equalitybool
public static bool operator ==(Rid left, Rid right);Проверяет равенство числовых Id без обращения к серверу. Сравнение не проверяет существование ресурса и не передаёт владение.
| Имя | Тип | По умолчанию |
|---|---|---|
left | Rid | — |
right | Rid | — |
leftЛевое значение RID.
rightПравое значение RID.
booltrue при одинаковых Id, иначе false.
op_Inequalitybool
public static bool operator !=(Rid left, Rid right);Проверяет различие числовых Id без обращения к серверу. Сравнение не проверяет существование ресурса и не передаёт владение.
| Имя | Тип | По умолчанию |
|---|---|---|
left | Rid | — |
right | Rid | — |
leftЛевое значение RID.
rightПравое значение RID.
booltrue при разных Id, иначе false.