EDIT 2
Как теперь кажется, вы хотите, чтобы объявить истинный тип значения, используя ключевое слово class
, которое по определению не представляется возможным.
Поскольку вы смотрите на создание класса с семантикой, похожими на System.String, вы должны, вероятно, декомпилировать System.String. Большая часть его магии скрыта в CLR, но многое из того, что вы увидите, поможет.
Для начала, вам обязательно нужно перегружать ==
и !=
, и переопределить Equals()
и GetHashCode()
. Вы почти наверняка захотите реализовать IComparable<T>
и IEquatable<T>
.
Другим важным аспектом струн является то, что они являются неизменяемыми. Это важная часть их поведения, подобного ценности, потому что он гарантирует, что две равные строки всегда будут равны. Если строки были изменчивыми, можно было бы изменить одну из строк, чтобы сделать ее неравной с другой.
Следует также отметить, что хотя строка имеет семантику, которая делает ее похожим на тип значения, это, конечно, ссылочный тип, и некоторые аспекты ссылочной семантики неизбежны.
Если вы публикуете немного больше о том, почему вы хотите это сделать, мы можем предложить более конкретные советы.
EDIT
В ответ на ваши изменения, вы, кажется, имеют неправильное представление о струнах. Хотя они ведут себя как типы значений в некотором роде, они не передаются напрямую, копируя их данные каждый раз, когда они передаются методу. Единственный способ добиться этого - объявить struct
. Строки, как и все классы, являются ссылочными типами, к которым можно обращаться только по ссылке; вы можете напрямую манипулировать ссылкой; вы можете передать только ссылку.
Вы имеете в виду 'Int32',' Int64' и т. Д.? – mmdemirbas
Трудно сказать, что именно вы имеете в виду. В C# классы не являются типами значений. Почему вы спрашиваете об этом? – svick
Вы имеете в виду класс, подобный 'System.String', со значениями, подобными семантике? Потому что, строго говоря, вы объявляете ссылочные типы с помощью 'class' и типов значений с' struct', по определению. Невозможно создать тип значения, используя объявление 'class'. – phoog