Могу ли я создавать средства доступа к структурам для автоматического преобразования в другие типы данных или из них?
Вопрос
можно ли сделать что-то вроде следующего:
struct test
{
this
{
get { /*do something*/ }
set { /*do something*/ }
}
}
так что если кто-то попытается это сделать,
test tt = new test();
string asd = tt; // intercept this and then return something else
Решение
Концептуально то, что вы хотите сделать, на самом деле возможно в .NET и C#, но в отношении синтаксиса вы идете не по тому дереву.Это похоже на оператор неявного преобразования было бы решением здесь,
Пример:
struct Foo
{
public static implicit operator string(Foo value)
{
// Return string that represents the given instance.
}
public static implicit operator Foo(string value)
{
// Return instance of type Foo for given string value.
}
}
Это позволяет вам назначать и возвращать строки (или любой другой тип) объектам вашего пользовательского типа или из них (Foo
здесь).
var foo = new Foo();
foo = "foobar";
var string = foo; // "foobar"
Два неявных оператора преобразования, конечно, не обязательно должны быть симметричными, хотя обычно это желательно.
Примечание:Это также explicit
операторы преобразования, но я думаю, что вам больше нравятся неявные операторы.
Другие советы
Расширение Ответ MikeP вы хотите что-то вроде:
public static implicit operator Test( string value )
{
//custom conversion routine
}
или
public static explicit operator Test( string value )
{
//custom conversion routine
}
Не связан с StackOverflow