РЕДАКТИРОВАТЬ 2
Как теперь кажется, вы хотите объявить тип истинного значения с помощью ключевого слова class
, которое по определению невозможно.
Поскольку вы смотрите на создание класса с семантикой, аналогичной System.String, вам, вероятно, следует декомпилировать System.String.Большая часть его магии скрыта в CLR, но многое из того, что вы увидите, поможет.
Для начала вам определенно потребуется перегрузить ==
и !=
и переопределить Equals()
и GetHashCode()
.Вы почти наверняка захотите реализовать IComparable<T>
и IEquatable<T>
.
Еще один важный аспект строк - это то, что они неизменны .Это важная часть их поведения, подобного значению, потому что оно гарантирует, что две одинаковые строки всегда будут равны.Если бы строки были изменяемыми, было бы возможно изменить одну из строк, чтобы сделать ее неравной для другой.
Я также должен отметить, что хотя строка имеет семантику, из-за которой она выглядит как тип значения, это, конечно, ссылочный тип , и некоторые аспекты семантики ссылок неизбежны.
Если вы опубликуете немного больше о том, почему вы хотите это сделать, мы можем предложить более конкретный совет.
РЕДАКТИРОВАТЬ
В ответ на ваши изменения, кажется, у вас неправильное представление о строках.Хотя они в некотором смысле ведут себя как типы значений, они не передаются напрямую, копируя свои данные каждый раз, когда они передаются методу. Единственный способ добиться этого - объявить struct
.Строки, как и все классы, являются ссылочными типами, доступ к которым возможен только по ссылке;вы можете только манипулировать ссылкой напрямую;Вы можете только передать ссылку на метод.