代码之家  ›  专栏  ›  技术社区  ›  MarkP

包装原语

c#
  •  3
  • MarkP  · 技术社区  · 14 年前

    我知道从原语派生类是不可能的,但是,我希望我的类看起来像是一个没有强制转换的原语。在这种情况下,我的类的操作非常类似于十进制:

        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;
    
    1 回复  |  直到 14 年前
        1
  •  7
  •   Justin Niessner    14 年前

    为什么不直接在你的程序中添加另一个方法呢 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();