2010-09-28 33 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