2010-03-01 9 views
10

là nó có thể làm điều gì đó như sau:Tôi có thể tạo accessors trên structs để tự động chuyển đổi sang/từ các kiểu dữ liệu khác không?

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

để nếu ai đó đã cố gắng để làm điều này,

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

Tôi không hiểu câu hỏi. –

+0

@John Knoeller: đã cập nhật câu hỏi – caesay

+3

Âm thanh như bạn muốn một nhà điều hành chuyển đổi ... – Shog9

Trả lời

7

Về mặt khái niệm, những gì bạn muốn thực hiện ở đây thực tế có thể trong .NET và C#, nhưng bạn đang sủa nhầm cây. Nó có vẻ như một implicit conversion operator sẽ là giải pháp ở đây,

Ví dụ:

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. 
    } 
} 

này cho phép bạn gán và trở về chuỗi (hoặc bất kỳ loại khác) đến/từ các đối tượng kiểu tùy chỉnh của bạn (Foo đây) .

var foo = new Foo(); 
foo = "foobar"; 
var string = foo; // "foobar" 

Hai toán tử chuyển đổi tiềm ẩn không nhất thiết phải đối xứng, mặc dù nó thường được khuyến khích.

Lưu ý: Ngoài ra còn có explicit toán tử chuyển đổi, nhưng tôi cho rằng bạn nhiều hơn sau khi các nhà khai thác tiềm ẩn.

+0

@sniperX: bạn phải tạo một phiên bản mới của Foo, dựa trên chuỗi. – Shog9

+0

Có, Shog9 là đúng. Nếu bạn không muốn hiển thị trực tiếp hàm tạo, không có vấn đề gì với việc chỉ đặt nó ở chế độ riêng tư/được bảo vệ. – Noldorin

2

Bạn có thể xác định implicitexplicit nhà khai thác chuyển đổi đến và đi từ kiểu tùy chỉnh của bạn.

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

Mở rộng trên MikeP's answer bạn muốn một cái gì đó như:

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

hoặc

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