2010-01-24 25 views
8

Aşağıdaki kodu düşünün:kullanma dize sabitleri

public class TextType { 

    public TextType(String text) { 
     underlyingString = text; 
    } 

    public static implicit operator String(TextType text) { 
     return text.underlyingString; 
    } 

    private String underlyingString; 
} 

TextType text = new TextType("Something"); 
String str = text; // This is OK. 

Ama mümkünse, aşağıdakileri yapmanız mümkün istiyorum.

TextType textFromStringConstant = "SomeOtherText"; 

Ben TextType örtülü operatör aşırı Dize sınıfını genişletmek olamaz, ama (bir yöntem ya da bir şey tarafından ele alınır) başka bir sınıfa değişmez bir dize atamak için herhangi bir yolu var mı?

Dize, bir referans türüdür, bu yüzden C# geliştirdiklerinde, açık bir şekilde, bir dizeyi baştan sona almak için bir yol kullanmak zorundaydılar. Umarım dile kodlanmış değildir.

+0

Ayrıntılar için şartnamenin 10.10.3 bölümüne bakın. –

cevap

9
public static implicit operator TextType(String text) { 
    return new TextType(text); 
} 
+0

Düzeltme metni! = Değer - daha hızlı olsaydınız :) –

+1

Bu operatör aşırı yüklerinin her iki yönden de gitmesini nasıl özlediğime inanamıyorum. Yöntemin String sınıfına ait olması gerektiğini hissetmiştim ... Teşekkürler. –

6

sınıflarına

public static implicit operator TextType(string content) { 
    return new TextType(content); 
} 

ekle?