reckfellENGINE

StringName

Интернированное имя движка с C#-обёрткой; значение, пустота и строковые преобразования.

На этой странице
class StringNameReckfellSharp

Класс C#, оборачивающий интернированное имя движка. Равные текстовые значения используют общее внутреннее представление, но могут находиться в разных управляемых объектах StringName. Поэтому ReferenceEquals не заменяет сравнение значений имён.

Поддерживаются преобразования между string и StringName. Например, присваивание StringName name = "player" создаёт обёртку имени; строковое содержимое можно получить через ToString(). В C# нет литерала &"player".

StringName не преобразуется в bool. Проверяйте наличие управляемой ссылки через is null, а пустое значение имени — свойством IsEmpty после проверки ссылки. Не считайте, что у StringName есть все методы System.String: для операций со строкой сначала получите строковое значение.

Объявления сверены с C# SDK 1.0.0. Раскройте имя, чтобы увидеть сигнатуры и описание.

Конструкторы2

StringName2 перегрузки
# StringName · 1/2
C#
public StringName();

Создаёт отдельный управляемый объект с пустым именем. IsEmpty равен true, ToString() возвращает пустую строку. Объект существует и не равен null.

# StringName · 2/2
C#
public StringName(string name);

Создаёт управляемую оболочку интернированного имени. Регистр и последовательность символов сохраняются: Unicode-нормализация не выполняется. Равные имена могут иметь разные управляемые оболочки; сравнивайте значения через == или Equals, а не ReferenceEquals. Пустая строка и, в текущем SDK, null дают пустое имя. Для обычного кода передавайте непустую ссылку string.

Пример возвращает true. Каждый локально созданный объект освобождается своим using; C#-литерала &"player" нет.

C#
using System;
using Reckfell;

public static class StringNameExamples
{
    public static bool SameName()
    {
        using StringName first = "player";
        using var second = new StringName("player");
        return first == second && !ReferenceEquals(first, second)
            && first.ToString() == "player";
    }
}
Параметры
ИмяТипПо умолчанию
namestring—
name

Текст имени. Пустая строка создаёт пустое имя; пробелы не удаляются.

Свойства1

IsEmptyСвойство
# IsEmpty
C#
public bool IsEmpty { get; }

Проверяет пустоту нативного имени. Новый StringName() и имя из пустой строки имеют IsEmpty == true. Это не проверка управляемой ссылки: сначала проверяйте name is not null. Свойство не проверяет отсутствие пробелов и не заменяет учёт времени жизни ресурса.

Методы15

Dispose2 перегрузки
# Dispose · 1/2
C#
public void Dispose();

Освобождает принадлежащую оболочке ссылку на нативное имя, снимает регистрацию ресурса и подавляет финализатор. Управляемая ссылка не становится null; другие самостоятельно созданные оболочки того же имени остаются действительными.

Освобождайте свой объект ровно один раз, обычно через using. В текущем SDK повторный Dispose() ранее зарегистрированной непустой оболочки выбрасывает ArgumentException («Disposable not registered»); идемпотентность не гарантируется. Не вызывайте Dispose() вручную внутри using и не освобождайте заимствованные имена, включая общие константы API. После освобождения не используйте объект и не оставляйте его ключом словаря: нативная идентичность и хеш меняются.

# Dispose · 2/2
C#
public void Dispose(bool disposing);

Низкоуровневая перегрузка освобождения. В текущей реализации оба значения disposing освобождают нативное имя и снимают регистрацию ресурса. Этот метод сам не вызывает GC.SuppressFinalize. В прикладном коде используйте Dispose() без аргументов или using; прямой вызов может оставить финализатор для уже освобождённого ресурса. Повторное снятие регистрации может выбросить ArgumentException.

Параметры
ИмяТипПо умолчанию
disposingbool—
disposing

Флаг пути освобождения; текущая реализация освобождает ресурс и при true, и при false. Это не переключатель сохранения нативного имени.

Equals3 перегрузки
# Equals · 1/3
C#
public bool Equals(in Reckfell.NativeInterop.reckfell_string_name other);

Перегрузка для нативного interop: сравнивает внутреннюю идентичность имени с действительным reckfell_string_name. Пустая оболочка равна пустому нативному имени. Метод не передаёт владение и не освобождает аргумент. Обычному игровому коду подходит Equals(StringName).

Параметры
ИмяТипПо умолчанию
otherReckfell.NativeInterop.reckfell_string_name—
other

Действительное нативное имя, срок жизни которого покрывает вызов; default представляет пустое имя. Не освобождайте заимствованное значение.

Возвращает bool

true, если нативные идентичности имён совпадают; иначе false.

# Equals · 2/3
C#
public bool Equals(StringName? other);

Сравнивает интернированное значение имени с другой управляемой оболочкой. Регистр значим; разные оболочки одинакового текста равны. null не равен даже пустому существующему StringName.

Параметры
ИмяТипПо умолчанию
otherStringName—
other

Другая оболочка имени или null.

Возвращает bool

true для одинаковых интернированных имён; false для другого имени или null.

# Equals · 3/3
C#
public override bool Equals(object? obj);

Возвращает true для этой же ссылки или другого StringName с тем же значением. Здесь преобразование string в StringName не выполняется: переданная как object строка с тем же текстом не равна имени.

Параметры
ИмяТипПо умолчанию
objobject—
obj

Проверяемый объект; StringName сравнивается по значению, другие типы и null не совпадают.

Возвращает bool

true только для StringName с тем же значением, включая эту же ссылку; иначе false.

GetHashCodeint
# GetHashCode
C#
public override int GetHashCode();

Возвращает хеш внутреннего нативного указателя имени. Живые равные имена имеют одинаковый хеш и подходят для Dictionary<StringName, T>. Разные имена могут иметь одинаковый хеш. Не сохраняйте результат в файл и не используйте как сетевой или стабильный идентификатор: это не переносимый хеш текста. Освобождение объекта изменяет его хеш.

Возвращает int

Хеш для текущей внутренней идентичности имени; стабильность между запусками не гарантируется.

ToStringstring
# ToString
C#
public override string ToString();

Возвращает текст имени как управляемую строку с сохранением регистра и Unicode. Для пустого имени возвращает string.Empty. Метод не освобождает StringName. Для строковых операций сначала получите string, затем используйте API System.String.

Возвращает string

Текст имени или пустая строка для пустого имени.

op_Equality3 перегрузки
# op_Equality · 1/3
C#
public static bool operator ==(in Reckfell.NativeInterop.reckfell_string_name left, StringName? right);

Перегрузка для нативного interop: сравнивает внутренние идентичности имён. Здесь управляемый null считается равным пустому нативному имени — в отличие от сравнения двух управляемых оболочек, где null не равен пустой оболочке. Порядок операндов результата не меняет. Аргументы не освобождаются.

Параметры
ИмяТипПо умолчанию
leftReckfell.NativeInterop.reckfell_string_name—
rightStringName—
left

Действительное нативное имя; default — пустое. Срок жизни должен покрывать вызов.

right

Управляемая оболочка или null; null соответствует пустому нативному имени.

Возвращает bool

true при одинаковых нативных идентичностях, включая null и пустое нативное имя; иначе false.

# op_Equality · 2/3
C#
public static bool operator ==(StringName? left, in Reckfell.NativeInterop.reckfell_string_name right);

Перегрузка для нативного interop: сравнивает внутренние идентичности имён. Здесь управляемый null считается равным пустому нативному имени — в отличие от сравнения двух управляемых оболочек, где null не равен пустой оболочке. Порядок операндов результата не меняет. Аргументы не освобождаются.

Параметры
ИмяТипПо умолчанию
leftStringName—
rightReckfell.NativeInterop.reckfell_string_name—
left

Управляемая оболочка или null; null соответствует пустому нативному имени.

right

Действительное нативное имя; default — пустое. Срок жизни должен покрывать вызов.

Возвращает bool

true при одинаковых нативных идентичностях, включая null и пустое нативное имя; иначе false.

# op_Equality · 3/3
C#
public static bool operator ==(StringName? left, StringName? right);

Сравнивает значения двух управляемых оболочек с учётом регистра. Две ссылки null равны; null и существующая пустая оболочка различаются. ReferenceEquals проверяет другую вещь — совпадение самих оболочек.

Параметры
ИмяТипПо умолчанию
leftStringName—
rightStringName—
left

Сравниваемая управляемая оболочка или null.

right

Сравниваемая управляемая оболочка или null.

Возвращает bool

true для одинаковых имён или двух ссылок null; иначе false.

op_Implicit2 перегрузки
# op_Implicit · 1/2
C#
public static implicit operator string(StringName? from);

Для существующей оболочки вызывает ToString(); для null возвращает null. Различайте null и пустое имя: пустой StringName преобразуется в "", отсутствующая ссылка — в null. Владение оболочкой не передаётся.

Параметры
ИмяТипПо умолчанию
fromStringName—
from

Имя для чтения или null.

Возвращает string

Текст имени; пустая строка для пустого имени; null для отсутствующей оболочки.

# op_Implicit · 2/2
C#
public static implicit operator StringName(string from);

Создаёт новую управляемую оболочку так же, как new StringName(from). Даже при уже интернированном тексте это отдельный объект с собственным временем жизни. Если преобразование создаёт ваш локальный ресурс, управляйте им через using; не освобождайте чужую общую оболочку.

Параметры
ИмяТипПо умолчанию
fromstring—
from

Исходный текст. Пустая строка и, в текущем SDK, null дают пустое имя.

Возвращает StringName

Новая оболочка StringName, включая отдельную пустую оболочку для пустого входа.

op_Inequality3 перегрузки
# op_Inequality · 1/3
C#
public static bool operator !=(in Reckfell.NativeInterop.reckfell_string_name left, StringName? right);

Отрицает соответствующий ==. Перегрузка для нативного interop: сравнивает внутренние идентичности имён. Здесь управляемый null считается равным пустому нативному имени — в отличие от сравнения двух управляемых оболочек, где null не равен пустой оболочке. Порядок операндов результата не меняет. Аргументы не освобождаются.

Параметры
ИмяТипПо умолчанию
leftReckfell.NativeInterop.reckfell_string_name—
rightStringName—
left

Действительное нативное имя; default — пустое. Срок жизни должен покрывать вызов.

right

Управляемая оболочка или null; null соответствует пустому нативному имени.

Возвращает bool

true при разных нативных идентичностях с описанным правилом null; иначе false.

# op_Inequality · 2/3
C#
public static bool operator !=(StringName? left, in Reckfell.NativeInterop.reckfell_string_name right);

Отрицает соответствующий ==. Перегрузка для нативного interop: сравнивает внутренние идентичности имён. Здесь управляемый null считается равным пустому нативному имени — в отличие от сравнения двух управляемых оболочек, где null не равен пустой оболочке. Порядок операндов результата не меняет. Аргументы не освобождаются.

Параметры
ИмяТипПо умолчанию
leftStringName—
rightReckfell.NativeInterop.reckfell_string_name—
left

Управляемая оболочка или null; null соответствует пустому нативному имени.

right

Действительное нативное имя; default — пустое. Срок жизни должен покрывать вызов.

Возвращает bool

true при разных нативных идентичностях с описанным правилом null; иначе false.

# op_Inequality · 3/3
C#
public static bool operator !=(StringName? left, StringName? right);

Отрицает результат ==. Сравнивает значения двух управляемых оболочек с учётом регистра. Две ссылки null равны; null и существующая пустая оболочка различаются. ReferenceEquals проверяет другую вещь — совпадение самих оболочек.

Параметры
ИмяТипПо умолчанию
leftStringName—
rightStringName—
left

Сравниваемая управляемая оболочка или null.

right

Сравниваемая управляемая оболочка или null.

Возвращает bool

true, если имена или состояние null различаются; иначе false.

Документация Reckfell EngineНаверх ↑
БЫСТРЫЙ ПЕРЕХОДНачало работыEntity и иерархияC# & .NET 10Сцены и префабы
Руководства и полный API Reckfell K
reckfellENGINE
RECKFELL ACCOUNT

Вход в аккаунт

Войдите в аккаунт Reckfell.

Один аккаунт для всей платформы Reckfell.