10

是否可以执行以下操作:

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

所以如果有人试图这样做,

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

3 回答 3

7

从概念上讲,您想要在此处执行的操作实际上在 .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转换运算符,但我认为您更喜欢隐式运算符。

于 2010-03-01T03:03:09.190 回答
2

您可以定义与自定义类型之间的隐式显式转换运算符。

public static implicit operator string(test value)
{
    return "something else";
}
于 2010-03-01T03:01:54.737 回答
0

扩展MikeP 的答案,您需要以下内容:

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

或者

public static explicit operator Test( string value )
{
    //custom conversion routine
}
于 2010-03-01T03:05:17.927 回答