Страницы

Поиск по вопросам

воскресенье, 29 декабря 2019 г.

Как в C# реализовано создание string из строки в кавычках?

#c_sharp


Если я пишу в коде строку в двойных кавычках, она сразу становится безымянным экземпляром
типа string, а значит я могу поставить в конце точку и использовать методы со строкой.
Если поставлю символ в одинарных кавычках - это будет char. А как мне реализовать что-то
подобное со своим классом? Ну например если я что то возьму в кавычки, перед которыми
будет символ звездочка (или просто в звездочки), то чтобы создавался экземпляр класса
MyClass?
    


Ответы

Ответ 1



То, что вы просите - это литералы для пользовательских типов. К сожалению, все поддерживаемые типы литералов жестко прописаны в стандарте языка. Но вместо них (в какой-то мере) можно использовать implicit-операторы. Например: public class MyClass { public string Prefix { get; set; } public string Suffix { get; set; } public static implicit operator MyClass(string source) { var tokens = source.Split(':'); return new MyClass { Prefix = tokens[0], Suffix = tokens[1] }; } } позволяет создавать объекты класса как: MyClass val = "a:b"; Console.WriteLine(val.Prefix); // a Console.WriteLine(val.Suffix); // b

Ответ 2



Реально преобразовать строку в собственный класс Вы не можете, так же как и вводить свои синтаксические правила. Собственный класс Вы можете создать только через конструктор. Остальных вариантов, допускаемых синтаксисом C# мне не известно. Однако, если Вас всего лишь интересует создание некоторых дополнительных, методов-расширений, которые так же будут доступны через точку для строки, то можете создать статический класс и в нем реализовать необходимые методы: public static class StringHelper { public static string TestMethod(this string str) { return "12345 " + str; } } А обращаться можете так: class Program { static void Main() { System.Console.Write("testStr".TestMethod()); } } Таким же способом Вы, кстати, можете и создать свой класс (но тут мне не ясно, чем такой вариант удобнее обычного конструктора), например: public static class StringHelper { public static MyOwnClass AsMyOwnClass(this string str) { return new MyOwnClass(str); } } ... var myVar = "Test Str".AsMyOwnClass();

Ответ 3



Никак, класс String - sealed класс. Или лезть в дебри CLI, в исхоники, и пытаться сделать хак, что не совсем просто.

Комментариев нет:

Отправить комментарий