Могу ли я создавать средства доступа к структурам для автоматического преобразования в другие типы данных или из них?

StackOverflow https://stackoverflow.com/questions/2353632

  •  23-09-2019
  •  | 
  •  

Вопрос

можно ли сделать что-то вроде следующего:

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 операторы преобразования, но я думаю, что вам больше нравятся неявные операторы.

Другие советы

Вы можете определить скрытый и явный операторы преобразования в и из вашего пользовательского типа.

public static implicit operator string(test value)
{
    return "something else";
}

Расширение Ответ MikeP вы хотите что-то вроде:

public static implicit operator Test( string value )
{
    //custom conversion routine
}

или

public static explicit operator Test( string value )
{
    //custom conversion routine
}
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top