2010-09-28 60 views
3

我知道從原語派生一個類是不可能的,但是,我希望我的類'看起來'像是一個沒有投射的原始類。在這種情況下,我班將操作就像一個十進制:C#包裝原語

public interface IFoo 
    { 
     static explicit operator Decimal(IFoo tFoo); 
    } 

    public class Foo: IFoo 
    { 
     private Decimal m_iFooVal; 

     public Decimal Value 
     { 
      get { return m_iFooVal; } 
      set { m_iFooVal= value; } 
     } 

     static explicit operator Decimal(IFoo tFoo) 
     { 
      return (tFoo as Foo).Value; 
     } 

    } 

上面的代碼不起作用,因爲明確的操作員可以在界面上沒有定義。我的代碼處理接口,我想保持這樣。是否有可能將IFoo轉換爲十進制?歡迎任何替代品。例如:

IFoo tMyFooInterfaceReference = GetFooSomehow();  
Decimal iVal = tMyFooInterfaceReference; 

回答

7

爲什麼不只是添加另一種方法你IFoo接口稱爲ToDecimal()並調用需要的時候嗎?

public interface IFoo 
{ 
    decimal ToDecimal(); 
} 

public class Foo : IFoo 
{ 
    public decimal Value { get; set; } 

    public decimal ToDecimal() { return Value; } 
} 

您的代碼就不會那麼複雜得多:

IFoo tMyFooInterfaceReference = GetFooSomehow(); 
decimal iVal = tMyFooInterfaceReference.ToDecimal(); 
+0

這是正確的做法。接口定義了合同,類實現了合同,而世界其他地方*知道合同是什麼*,與假設的轉換不同。 – 2010-09-28 19:44:57