2014-07-09 12 views
6

Para için yalnızca bir tane decimal alanını içeren özel bir değer türü kullanıyorum. Basitleştirilmiş kod aşağıdaki gibidir.Özel değer türüne bir son ek atayabilir miyim?

public struct Money 
{ 
    private decimal _value; 

    private Money(decimal money) 
    { 
     _value = Math.Round(money, 2, MidpointRounding.AwayFromZero); 
    } 

    public static implicit operator Money(decimal money) 
    { 
     return new Money(money); 
    } 

    public static explicit operator decimal(Money money) 
    { 
     return money._value; 
    } 
} 

Bu yapılandırmayı projemde kullanırken bazen bir belirsizlik ortaya çıkar. Ve bazen Money olması gereken sabit bir sayı ile bir object ayarlıyorum. Artık ben gibi nesne başlatılırken am için

object myObject=(Money)200; 

benim özel tip Money için bir sonek atayabilir. Nesneyi aşağıdaki ile başlatmak istiyorum.

object myObject=200p; 
+4

Hayır, bu C# mümkün değildir. Ancak bunu yapmak için bir ön işlemci yazabilirsiniz. – leppie

+0

Yapamazsınız. Btw 'p' ne anlama geliyor? Pound? –

+1

Belki de kendinize bir string parametresi olan bir kurucu veya örtülü bir operatör yazabilir ve onu manuel olarak ayrıştırabilirsiniz. – Tarec

cevap

7

C# ile özel son ekler atayamazsınız. Yapabileceğiniz en yakın şey tamsayılar için uzatma yöntemi yaratıyor:

public static Money Para(this int value) // you can do same for decimals 
{ 
    return (Money)((decimal)value); 
} 

Kullanımı:

var amount = 200.Para(); 
+0

Bunun üzerinde (Para) 200'ün avantajı nedir? – serdar

+0

@serdar IntelliSense. Sadece dot-p-tab yazdı ve bitti (üzgünüm, maalesef tamsayı değişmezleriyle parantez içinde çalışmıyor). Ayrıca benim için düz metin gibi okunabilir –