2010-03-01 27 views
10

是否有可能做一些這樣的:我可以在結構上創建訪問器來自動轉換爲/從其他數據類型?

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

所以,如果有人試圖做到這一點,

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

我不明白的問題。 – 2010-03-01 02:54:08

+0

@John Knoeller:更新了問題 – caesay 2010-03-01 02:58:04

+3

聽起來像是你想要一個轉換操作符... – Shog9 2010-03-01 02:58:40

回答

7

從概念上講,你想在這裏做什麼,其實是.NET和C#中的可能,但你找錯了樹,關於語法。這似乎是一個implicit conversion operator是這裏的解決方案,

例子:

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轉換運算符,但我認爲你更隱式運算符後。

+0

@sniperX:你必須根據字符串創建一個新的Foo實例。 – Shog9 2010-03-01 03:25:48

+0

是的,Shog9是對的。如果您不想直接公開構造函數,那麼將它私有/保護就沒有問題。 – Noldorin 2010-03-01 17:40:59

2

您可以定義implicitexplicit轉換運營商,並從您的自定義類型。

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

擴展在MikeP's answer你想要的東西,如:

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

public static explicit operator Test(string value) 
{ 
    //custom conversion routine 
} 
相關問題