#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, в исхоники, и пытаться сделать хак, что не совсем просто.
Комментариев нет:
Отправить комментарий