1

C# Şu Operatör i böyle bir şey yapmaya çalışıyorum aşırı öğrenme çok taze bitti:C# Operatör Aşırı yükleme, dizgi yeniden yazma?

string val = 500; (I can't implicitly) 

ve ben mesela Number n1 = someintvalue almak için yönetir ardından

Number n1 = val; 

: böyle

Number n1 = 500; 

:

public struct Number 
{ 
    public int Value { get; set; } 
    public Number(int Val) 
    { 
     Value = Val; 
    } 
    public static implicit operator Number(int num) 
    { 
     return new Number(num); 
    } 
} 

Bununla birlikte, Number n1 = val;

string val = 500; 

ve aşağıdaki alışkanlık iş: Ben sadece ilk satırı olamaz derleme beri can not (zaman val bir dizedir)

public static implicit operator string(int A) 
{ 
    return new string(A); 
} 

nedeniyle 1 hata anlayamıyorum
1) Kullanıcı tanımlı dönüşüm için veya i op yüklenmesinin fikir edinmek arada kapsayan tip

dönüştürmek gerekir
spesifik durum underthis: return new Number(num); Sadece ctor
'u initle hala daha temel bir anlayışa ihtiyacım var thx ahead!

+0

Yan nota: "struct" ile "class" arasındaki farkı anlamıyorsanız ve "struct" öğesine açıkça ihtiyaç duymadıkça "struct" özelliğini kullanmayın. Değişebilen yapılar genellikle gereksiz olan her türlü soruna neden olabilir. –

+0

Plus, 'string val = 500;' zayıf bir uygulamadır. Eğer bir string isterseniz string_: 'string val =" 500 "; C# güçlü yazılmış bir dildir ve bu şekilde ele alınmalıdır - çok tipli dönüşüm eklemeleri eklendiğinde bu tip güvenliği aşındırır. –

cevap

5

Teklif verdiğiniz işlevin Number sınıfında olduğunu varsayarım. Bir int numaralı telefondan, string numarasına, yasal olmayan bir sınıf içerisine bir dönüşüm operatörü eklediniz. Bir int alan yapıcıya sahip değildir string çünkü başarısız olur

public static implicit operator string(Number A) 
{ 
    return new string(A.Value); 
} 

: Yalnızca gibi ya da tanımlanan konum türünden dönüştürmek operatörleri, ekleyebilir. Sen yapabilirdi : dizesine bir dönüşüm istendiğinde

public static implicit operator string(Number A) 
{ 
    return A.ToString(); 
} 

Ama bir dizeye "dönüştürmek" için standart yoludur derleyici genellikle otomatik aramaları ToString yöntemi, aşırı:

public override string ToString() 
{ 
    return Value.ToString(); 
} 
+0

Burada yaptığın şeyi aldım. Ancak, dize val = 500 nasıl yapılacağını anlamıyorum; void Ana – N3wbie

+0

'500' içinde bir tam sayı değil, bir dize. Int'den 'string''e dolaylı bir dönüşümü yoktur, yani 'string val =" 500 "; veya string = val = 500.ToString();' dır. C#, tür güvenli bir dildir. JavaScript gibi kullanmaya çalışmayın. –