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

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

struct test
{
   this
   {
      get { /*do something*/ }
      set { /*do something*/ }
   }
}

так что если кто-то попытался сделать это,

test tt = new test();
string asd = tt; // intercept this and then return something else

Ответы [ 3 ]

7 голосов
/ 01 марта 2010

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

2 голосов
/ 01 марта 2010

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

public static implicit operator string(test value)
{
    return "something else";
}
0 голосов
/ 01 марта 2010

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

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

или

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